私は「Java Concurrency in Practice」という本を読んで、Java の同時実行がどのように機能するかをよりよく理解しています。第 3 章セクション 3.1: 可視性 本書が可視性の問題がどのように発生するかを示そうとする例があります。以下にコード例を示します (本のリスト 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;
}
}
この本によると、ready の値がリーダー スレッドに表示されることは決してないため、NoVisibility は永久にループする可能性があります。そんなことがあるものか。いずれにせよ、ready はある時点で true になるというのが私の一般的な理解です。しかし、なぜこれが起こらず、ループが永遠に続くのか理解できません。誰かがこれをよりよく理解するのを手伝ってくれますか?