我想向我自己展示從多個線程訪問變量而不使用任何類型的同步時的線程安全問題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
線程)。
這真的是42次運行嗎? – kosa
沒有,印刷'42' – tarrsalah
檢查這個問題:http://stackoverflow.com/questions/2787094/how-to-demonstrate-java-multithreading-visibility-problems有關的「Java併發編程實踐」 [問題 – Katona