visibility
在不使用任何同步方式从多个线程访问变量时,我想向自己展示线程安全问题。
我正在从Java Concurrency in Practice运行这个示例:
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
@Override
public void run() {
while (!ready) {
Thread.yield();
}
System.out.println(number);
}
}
public static void main(String[] args) throws InterruptedException {
new ReaderThread().start();
number = 42;
ready = true;
}
}
如何让它永远循环而不是42
每次运行时都打印(永远循环意味着线程中变量的修改对ready = true;
线程ReaderThread
不可见main
)。