Java中Volatile表示什么

Java中volatile修饰符是一种用来保证不同线程之间交互的特殊机制。当一个线程修改volatile变量,另一个线程能够看到这个修改。第一个线程通知第二个线程变量已经被修改。

下面用图来解释:

ready是一个volatile boolean变量, 初值设为false. answer是一个非volatile int变量,初值是0.

第一个线程准备好修改ready变量,它是两个线程交流的发送方。第二个线程读取ready变量,获取第一个线程修改的值,因此它是接收方。在两个线程交流时,在线程1修改ready变量前,内存中所有变量对线程1可见,在线程2准备好读取ready变量的值true后,内存中所有变量必须对线程2可见。

这就保证了如果线程要输出什么的值的话,那就是42.

如果ready不是volatile的,那会发生什么呢?在线程1和线程2之间将不会有任何明显的交流。

线程1修改ready(现在是non-volatile)后的值可能会传递给线程2,因此线程可能可以读取ready的值true. 然而,线程1也可能不会将修改后的ready的值传递给线程2,answer的值也不会传递给线程2,那么线程2将会输出0.

 

参考资料:

http://jeremymanson.blogspot.jp/2008/11/what-volatile-means-in-java.html

 

posted on 2015-05-28 23:00  karenwang  阅读(1638)  评论(0编辑  收藏  举报

导航