volatile的含义及使用场景

Posted 穿林度水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了volatile的含义及使用场景相关的知识,希望对你有一定的参考价值。

volatile保证线程间的数据是可见的(共享的),但不保证数据同步

volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有锁机制。它确保对volatile字段的更新以可预见的方式告知其他的线程。
volatile包含以下语义:
(1)Java 存储模型不会对valatile指令的操作进行重排序:这个保证对volatile变量的操作时按照指令的出现顺序执行的。
(2)volatile变量不会被缓存在寄存器中(只有拥有线程可见)或者其他对CPU不可见的地方,每次总是从主存中读取volatile变量的结果。 也就是说对于volatile变量的修改,其它线程总是可见的,并且不是使用自己线程栈内部的变量。也就是在happens-before法则中,对一个 valatile变量的写操作后,其后的任何读操作理解可见此写操作的结果。

volatile变量的特性不错,但是volatile并不能保证线程安全的,也就是说volatile字段的操作不是原子性的,volatile变量只能保证可见性(一个线程修改后其它线程能够理解看到此变化后的结果),要想保证原子性,目前为止只能加锁!

Volatile有五个使用场景(参考Brian Goetz ([email protected])的文章):

1.作为状态标志

 

2.一次性安全发布

 

3.独立观察

 

4.volatile bean模式

 

5.开销较低的读写锁策略

http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

 

以上是关于volatile的含义及使用场景的主要内容,如果未能解决你的问题,请参考以下文章

volatile原理和使用场景

SSM框架中注解含义及应用场景小结

volatile关键字的使用场景

Volatile的应用场景

Java 并发编程线程共享变量可见性 ( volatile 关键字使用场景分析 | MESI 缓存一致性协议 | 总线嗅探机制 )

volatile的使用场景