java并发编程专题java内存模型(二)
本章主要讨论java内存的可见性问题,即在什么情况下另一个线程能够读取到当前线性写入的变量值。
我们知道volatile变量一旦写入,另一个线程能够立刻读取到写入的值,在 java并发编程专题---volatile之内存可见性检测给出了实例来说明该问题,但有的时候,不加volatile关键字的变量也能够被另一个线程读取到,以下是“java并发编程实战”中的代码:
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready) {
Thread.yield();
}
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
在我的电脑上是能够读取到最新值的。这就说明在没有一定条件的干预下,对于共享的变量何时写入到主内存中,何时从内存中读取是不可预测的!从书中可以知道volatile、final、原子变量、锁机制对于内存可见性都有影响,但内存可见性也只是java内存模型中的一部分内容而已,而且后面的重排序和happens before貌似挺复杂,所以边学边记吧。
以上是 java并发编程专题java内存模型(二) 的全部内容, 来源链接: utcz.com/z/512310.html