-1

では、スレッドを一時停止する最良の方法は何ですか? これまでのところ、次のようなものがあります。スレッドのメインループでは、最初の行は次のとおりです。

while (paused == true) {
   Thread.sleep(refreshRate);
}

そして、それは完璧に機能します。Pキーを押して一時停止状態を変更できます。しかし、私はより良い、よりプロフェッショナルなソリューションを探しています. 再入可能なロックと条件について知っています。そのため、スレッドでそれらを使用できました。そして、P を押すと singalAll() メソッドが解放されます。しかし、このスレッドでは実際には必要のない同期のために、アプリの速度が大幅に低下します。では、それを解決するための最良の、最もパフォーマンスの高い方法は何ですか? たぶん同期ブロックを使用していますか?

synchronized (new Object()) {

}

次に、コードの一部だけが同期されます。それとも、セマフォを使用する必要がありますか?

4

3 に答える 3

1

次のような待機/通知スキームを使用する必要があります。

  1. 一時停止するスレッドにアトミックブールフラグを作成します。
  2. フラグが設定されると、スレッドはロックオブジェクトに対してwait()を呼び出す必要があります
  3. スレッドの一時停止を解除する場合は、フラグをリセットし、ロックオブジェクトでnotify()を呼び出します。
于 2013-02-17T15:21:34.953 に答える
0

wait() と notify() を使用する

Object waitLock = new Object();

//...


// waiter Thread
synchronized (waitLock) {
   waitLock.wait();
}


// wake up with

waitLock.notify();
于 2013-02-17T15:32:17.783 に答える