volatile java

volatile 挥发性的;不稳定的;爆炸性的;反覆无常的
http://dict.youdao.com/w/volatile/#keyfrom=dict.

Volatile 变量

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。
出于简易性或可伸缩性的考虑,您可能倾向于使用 volatile 变量而不是锁。当使用 volatile 变量而非锁时,某些习惯用法(idiom)更加易于编码和阅读。此外,volatile 变量不会像锁那样造成线程阻塞,因此也很少造成可伸缩性问题。在某些情况下,如果读操作远远大于写操作,volatile 变量还可以提供优于锁的性能优势。


用volatile修饰的变量,线程每次使用这个变量的时候,都会读取这个变量最后修改的值;经常误用的用法:当原子性操作使用,错误 错误 错误 重要的事情说三遍!!!


线程直接从主内存中读取,没有相应的拷贝,可用于线程之间的通信;重要的事情: 不常误用成同步;除非像long,int 这些的赋值等原子性操作才可以,a++这种都不是原子性操作;

1、普通变量、用volatile修饰的变量的区别?
2、volatile使用的场合?

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

volatile java_第1张图片
Paste_Image.png

https://zh.wikipedia.org/wiki/%E5%8F%8C%E9%87%8D%E6%A3%80%E6%9F%A5%E9%94%81%E5%AE%9A%E6%A8%A1%E5%BC%8F

http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html
普通变量--主内存与线程工作内存的示意图

volatile java_第2张图片
Paste_Image.png

你可能感兴趣的:(volatile java)