java并发编程专题--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);
        }
    }app

    public static void main(String[] args) {.net

        new ReaderThread().start();
        number = 42;
        ready = true;
    }
}线程

在个人电脑上是可以读取到最新值的。这就说明在没有必定条件的干预下,对于共享的变量什么时候写入到主内存中,什么时候从内存中读取是不可预测的!从书中能够知道volatile、final、原子变量、锁机制对于内存可见性都有影响,但内存可见性也只是java内存模型中的一部份内容而已,并且后面的重排序和happens before貌似挺复杂,因此边学边记吧。blog

相关文章
相关标签/搜索