参考文章:
当我们说线程安全时,到底在说什么
http://www.jasongj.com/java/thread_safe/
多线程不安全的原因和基本的解决方案
https://my.oschina.net/u/2930289/blog/1831411
补充:
- 对volatile变量执行写操作时,会在写操作后加入一条
store
屏障指令,让主内存中的变量及时更新,写完直接刷新到主内存中 - 对volatile变量执行读操作时,会在读操作前加入一条
load
屏障指令,更新工作内存中的变量,读之前将主内存的最新变量更新到工作内存中