Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。
内存模型相关概念
操作系统语义
1 | i++i++ |
Java内存模型
原子性
原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
1 2 3 4 | i = 0; ---1j = i ; ---2i++; ---3i = j + 1; ---4 |
volatile是无法保证复合操作的原子性
可见性
可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。
有序性
有序性:即程序执行的顺序按照代码的先后顺序执行。
剖析volatile原理
volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。
总结
volatile经常用于两个两个场景:状态标记两、double check
参考资料
转载请标明出处:深入分析volatile的实现原理
文章来源: 深入分析volatile的实现原理