volatile特性及内存语义

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

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

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

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

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

3.volatile-的内存语义 :

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

volatile特性及内存语义

 

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

volatile特性及内存语义

4.总结:

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzszzj.html