java volatile 和 CAS

Volatile and CAS

Volatile

原理

写Volatile变量时,最后一条指令是内存屏障,即所有对这一变量的读写都要在内存屏障后执行。

最适合使用volatile的例子

Volatile 的bool变量,UI线程改变volatile的值,以控制work线程的运行与停止。

Volatile 单例模式

Public class SingletonDemo {

    Public static volatile SingletonDemo instance = null;

    Private SingletonDemo() {}

    Public static SingletonDemo getInstance() {

        If (instance == null){

            Synchronize(Singleton.class) {

                If (instance == null) {

                    Instance = new SingletonDemo();

                }

            }

        }

        Return instance;

    }

}

*Volatile long, double是原子操作

CAS

写入时,判断寄存器值和旧值是否相等,如果相等,则没有冲突,写入新值。如果不等,说明该值被别的线程改过,重新尝试写入。

ref:

https://www.cnblogs.com/Mainz/p/3546347.html

你可能感兴趣的:(java volatile 和 CAS)