多线程---可见性

近日在看《JAVA并发编程实践》一书,看到可见性一节,有一疑问,请看代码:

package com.eshore.mall.common;

public class VisibleTest {
    private static boolean ready = false;
    private static int number = 0;

    public static void main(String[] args) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                while (!ready) {
                    try {
                        Thread.yield();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(number);
            }
        }).start();
        number = 42;
        ready = true;
    }

}

 书说打印结果有三种可能:1)0,2)永远不会终止,3)42

但我在本地上跑都是42,什么原因呢?

你可能感兴趣的:(多线程,并发,可见性)