假设我有以下两个类。
public class Foo {
private volatile Integer x = 0;
private volatile boolean istrue = false;
public void setInt(int x) {
this.x = x;
}
public void setBoolean(boolean istrue) {
this.istrue = istrue;
}
public Integer getInt() {
return x;
}
}
vs
public class Bar {
private volatile AtomicInteger x = 0;
private volatile AtomicBoolean istrue = false;
public void setInt(int x) {
this.x.set(x);
}
public void setBoolean(boolean istrue) {
this.istrue.set(istrue);
}
public Integer getInt() {
return this.x.get();
}
}
假设多个线程可以访问Foo或Bar类,这两个类都是线程安全的吗?这两个类之间的区别是什么?
0
和false
等原始值分配给AtomicInteger
或AtomicBoolean
。对于这些类型,没有自动装箱。 - JesperFoo
和Bar
类允许哪些状态?哪些状态是不允许的?这里是“线程安全”不意味着的内容。它并不意味着在程序中使用此类将使您的程序线程安全。 - Solomon Slow