Atomic究竟是什么?因为我必须选择一些语言来更清楚地构建我的问题,我会选择Java。我知道原子意味着做所有事情或只是回滚/什么也不做。所以说我有以下
public class Myclass {
private boolean progress;
public void setProgress(boolean progress) {
this.progress = progress;
}
public boolean getProgress() {
return progress;
}
}
现在以下哪个是线程安全的或原子的或两者兼而有之?请将每个新行视为单独的代码
-------------------
getProgress(); //
------------------
----------------------
setProgress(true); //
----------------------
-------------------
getProgress()
setProgress();
-------------------
--------------------
setProgress();
getProgress();
--------------------
在java中使用AtomicReference会有哪些意义?
答案 0 :(得分:2)
由此:
What operations in Java are considered atomic?
我会说它们都不是原子的,因为函数调用不是原子操作。但是一旦你进入一个函数,指定一个布尔值是原子的(只是那条线),返回它不是。
对于线程安全,请看一下:
基本上,“进度”的旧值可能缓存在cpu中,所以即使分配它一个新的值是原子的(只是那个=行再次)没有同步赋值(AtomicBoolean或synchronized getter / setter)它是线程安全的但是可能存在内存一致性错误,因此您可能希望声明该变量volatile,以便其他线程可以看到最新的值。