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