Java中Volatile表示什么

我的梦境 提交于 2020-01-28 12:20:15

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!