3.1可见性
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;
}
}
对于书中说的这说的可能会打印出0或者根本不会终止,存在疑问,run方法中while不是会一直判断ready的值吗?在网上搜yield()方法说只是从执行状态变为可执行态,还会重新执行,即使重新执行也是会重新判断ready的值啊,即使主线程一直获取不到线程执行,ready的值也是一直为false,不会打印number的值。
感觉一直会等主线程赋完值并将ready改为true后,run线程才会打印number 42。在idea中执行代码也没有出现0的状态,对此表示疑问。。。
接触多线程开发时间还不长,在此做个标记