1.volatile变量自身具有下列特性:
·可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
·原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。

2.volatile建立的happens-before关系 :

从内存语义的角度来说,volatile的写-读与锁的释放-获取有相同的内存效果:

                                  volatile写和锁的释放有相同的内存语义;

                                  volatile读与锁的获取有相同的内存语义。

3.volatile的内存语义 :

写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存

 

读:当一个volatileJMM会把该线对应的本地内存置无效线程接下来将从主内存中取共享
 

4.总结:

·线A写一个volatile量,实质上是线A向接下来将要读这volatile量的某个线程发出了(其共享量所做修改的)消息。
·线B一个volatile量,实质上是线B接收了之前某个线出的(在写volatile变量之前共享量所做修改的)消息。
·线A写一个volatile量,随后线B读这volatile量,实质上是线A过主内存向线B送消息。 

 

 

版权声明:本文为AmbitiousMice原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/AmbitiousMice/p/8383946.html