Я читаю книгу: "Параллелизм Java на практике", чтобы лучше понять, как работает параллелизм 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;
}
}
В книге говорится, что NoVisibility может зацикливаться вечно, потому что значение ready может никогда не стать видимым для потока чтения. Как это возможно? Мое общее понимание состоит в том, что ready в любом случае станет истинным в определенное время. Но я не могу понять, почему этого может не произойти, и цикл продолжается вечно. Может ли кто-нибудь помочь мне понять это лучше.