码迷,mamicode.com
首页 > 编程语言 > 详细

Java中Volatile表示什么

时间:2015-05-29 00:30:47      阅读:170      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!