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

回到顶部