java volatile变量

来源:互联网 发布:简易电路图绘制软件 编辑:程序博客网 时间:2024/06/05 17:14

关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,所以很多程序员都习惯不去使用它。

         当一个变量定义为volatile之后,它将具备两种特性。

1.       java保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。

关于volatile变量的可见性,经常会被开发人员误解,认为以下描述成立:“volatile变量对所有线程是立即可见的,对volatile变量的所有写操作都能立刻反应到其他线程之中,换句话说,volatile变量在各个线程中是一致的,所以基于volatile变量的运算在并发下是安全的”。这句话的论据部分没有错,但是其论据并不能得出“基于volatile变量的运算在并发下是安全的”这个结论。volatile变量在各个线程的工作内存中不存在一致性问题,但是Java的运算并非原子操作。

 

2.       使用volatile的第二个语义是禁止指令重排序优化。

 

 

参考《深入理解java虚拟机》一书

0 0
原创粉丝点击