私の問題を説明するための基本的な例を使用して、私は2つのほぼ同じビットのコードを持っています。whileループとスレッディングの無限ループ問題
このコードにより、while
ループが無限に実行されます。
private boolean loadAsset() {
new Thread(new Runnable() {
@Override
public void run() {
// Do something
loaded = true;
}
}).start();
while (!loaded) {
// System.out.println("Not Loaded");
}
System.out.println("Loaded");
return false;
}
しかし(すなわち、whileループで何かをやって)このコードは、loaded
変数が正常に評価されるようにするとwhile
破るループと終了する方法を可能にします。
private boolean loadAsset() {
new Thread(new Runnable() {
@Override
public void run() {
// Do something
loaded = true;
}
}).start();
while (!loaded) {
System.out.println("Not Loaded");
}
System.out.println("Loaded");
return false;
}
これはなぜ私に説明できますか?
他のフィールドで変更できるフィールド値に頼っているのはなぜですか?あなたはブロックを同期している間に全体を作らなければならないかもしれません。 – Reddy
''ロードされました '' volatile'ですか? – axtavt