java内存模型之volatile变量

一   volatile关键字的作用

1  保证任意单个变量读/写的原子性,即使是64位的long/double变量,也能保证其读/写具备原子性,但是在类似vlolatile变量的复合操作上,volatile关键字将不具备原子性

2  保证变量的可见性,即对一个变量的读,总能看到其他任意线程对该vlolatile变量的最后写入

 

 

二 volatile关键字的内存语义

1 读的内存语义

        当线程读一个volatile变量的时候,首先JMM会把线程工作内存中的(也就是线程的本地内存)的变量置为无效,然后从主内存中读取共享变量,这样线程本地内存中中与主内存中的共享变量的值将一致

2 写的内存语义

       当写一个共享变量的时候,线程会将对应的本地内存中的变量值刷新同步到主内存

 

总结:

       线程A写一个共享变量,实际上是向接下来要读这个变量的某个线程发送一条(线程A对这个变量做了修改的)消息。

       线程B读一个共享变量,实际上是接收到了之前其他线程发出的对这个共享做了修改的消息。

       线程A对volatile变量写,线程B读共享变量读,实际上是线程A和线程B通过主内存进行通信

 

三  volatile关键字底层原理

 

 

 

 

    原文作者:java内存模型
    原文地址: https://blog.csdn.net/qq_35948869/article/details/82587865
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞