深入分析volatile的实现原理

匿名 (未验证) 提交于 2019-12-03 00:33:02

Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。

内存模型相关概念

操作系统语义

1
i++i++

Java内存模型

原子性

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

1
2
3
4
i = 0;            ---1
j = i ;            ---2
i++;            ---3
i = j + 1;    ---4

volatile是无法保证复合操作的原子性

可见性

可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性

有序性:即程序执行的顺序按照代码的先后顺序执行。

剖析volatile原理

volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。

总结

volatile经常用于两个两个场景:状态标记两、double check

参考资料

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!