別のスレッドでイベントが参加するまでスレッドをスリープします

StackOverflow https://stackoverflow.com/questions/121762

  •  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 などは機能しますが、少し簡潔になる可能性があります。

バックポート-util-concurrent

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top