首页 > 编程语言 > 详细

Java中Volatile表示什么

时间:2015-05-29 00:28:24      阅读:246      评论:0      收藏:0      [点我收藏+]

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

 

Java中Volatile表示什么

原文:http://www.cnblogs.com/KarenWang/p/4537172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!