私はJava Concurrency in Practiceを勉強していて、そこには、次のコードスニペットが悪い理由を説明しますジャワ、視認性と無限ループが発生
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;
}
}
このコードは、永遠に0またはループを印刷することができます。 NoVisibility
が(再注文問題のために)42の代わりに0を印刷できる理由を理解するのは簡単ですが、 私は無限ループについて少し混乱します。
このコードで無限ループが発生する可能性がある実際のシナリオは何ですか? ready
がtrue
に設定されている場合
あなたがループを作る場合は、 'それが無限ループになってすることがはるかに可能性があり、{}ながら'私を発見しました。 (あなたは '{' btw)が見つからないようです –
はい、申し訳ありません。ただ修正しました。これは一般的なカットアンドペーストエラーでした。 :) –