volatile关键字

1.加上volatile关键字,可以保证该变量在多线程中的可见性。

2.通过汇编语言,可以发现它是通过lock实现的。

3.volatile的变量在一个线程中被修改后,lock加锁,其他线程不可以操作。

4.将volatile的变量修改后的值重新立即写回到主内存。

5.其他线程通过MESI缓存一致性协议的嗅探机制,立即使本线程的volatile变量的值失效。

6.其他线程需要重新从主内存将volatile的变量读取一次。

7.但是volatile的变量在修改后,但是还没有写回到主内存的这个时间内(虽然是修改后立即就写回去),它是加锁了的,其他线程得等,等volatile的变量的值写回到主内存。

8.重新写回主内存成功,其他线程读取。

 

volatile的可见性通过汇编语言的lock和MESI协议生效。

 

上面讲的不怎么好,而且漏了一些东西,当时看的视频没有提到,

1.原子性的预防

2.可见性(上面只提到了可见性)

3.防止虚拟机重排序

 

只是自己做的一个笔记,然后今天2020-8-25看到一篇对volatile讲的特别详细的博客

Java并发编程:volatile关键字解析 

posted on 2020-08-17 19:39  我欲皆真  阅读(76)  评论(0编辑  收藏  举报

导航