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

来源:-

child22222

2017-12-21 15:38

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也不会出现。



写回答 关注

1回答

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

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

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55899 学习 · 89 问题

查看课程

相似问题