別のスレッドでイベントが参加するまでスレッドをスリープします
-
02-07-2019 - |
質問
Android アプリケーションには 2 つのスレッドがあり、1 つはビュー スレッド、もう 1 つはワーカー スレッドです。私がやりたいのは、ビュー スレッドが onDraw メソッドの処理を終了するまでワーカー スレッドをスリープさせることです。
どうすればこれを行うことができますか?信号待ちか何かありますか?
解決
2 つのスレッド間で java.lang.Object を共有します。その唯一の目的は、ワーカー スレッドにいつ作業を継続できるかを伝えることです。ワーカー スレッドがスリープ状態に達すると、次の処理が実行されます。
stick.wait();
ビュー スレッドが onDraw 作業を終了すると、これを呼び出します。
stick.notify();
ビュー スレッドがオブジェクトのモニターを所有するという要件に注意してください。あなたの場合、これは小さな同期ブロックで非常に簡単に適用できるはずです。
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
これらのメソッドについては java.lang.Object の javadoc を参照してください (念のため、notifyAll も参照してください)。とてもよく書かれています。
他のヒント
より高いレベルの同時実行 API (バリアなどを使用) が必要な場合は、Java 5 同時実行 API のバックポートを試すことができます。これは Java 1.3 以降で動作し、Android でも動作する可能性があります。Object.wait/notify などは機能しますが、少し簡潔になる可能性があります。
所属していません StackOverflow