ループ内で実行されているスレッドを安全に停止し、最後のループを終了してから制御をストッパーに戻すメソッドを作成したいと考えています。
今、何をしようとしてもフリーズします。おそらくデッドロックなどから抜け出します。Java は私の通常の環境ではないため、これがさらに別の待機/通知の質問になる可能性があるのはなぜですか。
boolean isRunning = true;
@Override
public void run() {
super.run();
while (isRunning) {
// Do work...
}
synchronized(this) {
this.notify();
}
}
public void stopSafely() {
isRunning = false;
try {
synchronized(this) {
this.wait();
}
} catch (InterruptedException ex) {
// Handle...
}
}
このアプローチの問題は ( で同期するという事実は別としてthis
、例を簡単にするためです)、のnotify
前に呼び出された場合wait
、呼び出し元がフリーズすることです。
私が囲んでいるブロックで遊んでsynchronized
問題を解決できると確信していますが、正しい組み合わせが得られないようです.
何か案が?