xxt*_*oxx 5 java concurrency multithreading
这个类是线程安全的吗?
是否有可能看到不一致的值?让我们说最初的值是80.线程1调用setA(100)并进入函数但尚未调用a.set(100)并且线程2同时调用getA().线程2有可能看到80吗?
public class A {
private AtomicInteger a;
public int getA() {
return a.get()
}
public void setA(int newVal){
a.set(newVal);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道同步它将保证线程2看到100,但不确定AtomicInteger.
Gra*_*ray 10
这个类是线程安全的吗?
是的.
线程1调用setA(100)并进入函数但尚未调用a.set(100)并且线程2同时调用getA().线程2有可能看到80吗?
是.在AtomicInteger完成内部同步volatile字段的内存屏障代码之前,竞争条件可以显示80或100.
线程1甚至可以进入AtomicInteger.set方法并且在内部字段分配之前,并且仍然可以通过get AtomicInteger.get方法返回80 .
无法保证何时在其他线程中更新值.保证的是,当get()完成时,您获得最新的同步值,并且当set()完成时,所有其他线程将看到更新.
无法保证不同线程中getter和setter调用的时间.
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |