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) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
1、不知道你想问什么
2、对java不懂,Thread.yield()干吗的?只是简单的休息吗?
3、能正确运行,运行的结果是输出42,绝对不会有问题,但你感觉不出来线程并发的。
4、也许什么都没输出就退出了。
private static boolean ready;
private static int number;
1、这两个变量会碰到高速缓存一致性问题,因此需要使用 volatile 修饰。
2、修改这两个变量的值的时候请使用 InterlockedXXX 方法。