什么是原子?

时间:2016-05-28 19:06:26

标签: java multithreading

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会有哪些意义?

1 个答案:

答案 0 :(得分:2)

由此:

What operations in Java are considered atomic?

我会说它们都不是原子的,因为函数调用不是原子操作。但是一旦你进入一个函数,指定一个布尔值是原子的(只是那条线),返回它不是。

对于线程安全,请看一下:

Are java getters thread-safe?

基本上,“进度”的旧值可能缓存在cpu中,所以即使分配它一个新的值是原子的(只是那个=行再次)没有同步赋值(AtomicBoolean或synchronized getter / setter)它是线程安全的但是可能存在内存一致性错误,因此您可能希望声明该变量volatile,以便其他线程可以看到最新的值。