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讲的特别详细的博客