问答详情
源自:-

在《java并发编程实战》这本书中有一个例子

package chapter3;


import java.util.Iterator;


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;

    }

}


结果有可能是42,0或者是死循环。

我只能做出42这种情况。为什么?其它两种情况没成功过,加sleep也不会出现。



提问者:child22222 2017-12-21 15:38

个回答

  • 洋__
    2018-10-07 21:56:03

    你的处理器是多核的,书上是不是写这是单核处理器的情况?