Java文档中的易失性变量说明

前端之家收集整理的这篇文章主要介绍了Java文档中的易失性变量说明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

when a thread reads a volatile variable,it sees not just the latest change to the volatile,but also the side effects of the code that led up the change

这在http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html提到

有人可以提供一个例子吗?

这首先给我的印象是,读取volatile变量的线程将与writer线程同步并等待写入完成.但事实显然并非如此.

一个例子可以帮助很多,并非常感激.

谢谢,
穆斯塔法

解决方法

假设您有以下课程:
public class Shared {
    public int a;
    public int b;
    public volatile int c;
}

现在让我们说线程A有一个对这个类的实例的引用

shared.a = 1;
shared.b = 2;
shared.c = 3;

让我们说线程B有一个对同一个实例的引用

display(c);
display(b);
display(a);

然后,如果为c显示的值是3(即如果在读取线程B之前发生了线程A的写入),则Java内存模型保证2和1也将分别显示为b和a,因为在写入易失性c之前已经进行的线程A的所有动作都保证被读取c的新值的线程可见.

猜你在找的Java相关文章