消費されるリソースの観点から、ブロックされたスレッドと待機中のスレッドの違いは何ですか(CPUサイクルなど)。むしろ、notify()を呼び出して、1つのスレッドをウェイクアップし、他のスレッドを待機状態のままにします。または、notifyall()を呼び出して、すべての待機中のスレッドをブロック状態(実行可能に正常に移行したスレッドを除く)に移行させますか?
質問する
154 次
1 に答える
4
消費されるリソースの観点から、ブロックされたスレッドと待機中のスレッドの違いは何ですか(CPUサイクルなど)。
なし。スレッドは、待機中またはブロックされている間、CPUサイクルを消費しません。
むしろ、notify()を呼び出して、1つのスレッドをウェイクアップし、他のスレッドを待機状態のままにします。または、notifyall()を呼び出して、すべての待機中のスレッドをブロック状態(実行可能に正常に移行したスレッドを除く)に移行させますか?
notifyAll()
待機中のスレッドの1つを除くすべてが待機状態に戻る結果になる場合notify()
...そして続行できるスレッドをウェイクアップします...それならnotify()
より良いです。スレッドがウェイクアップされるたびに、CPU時間がかかります。
ただし、wait / notify / notifyAllとそのパフォーマンス特性を理解するのに苦労している場合は、java.util.concurrent
パッケージによって提供される高レベルの同時実行クラスの1つを使用することをお勧めします。
于 2012-09-08T11:16:18.887 に答える