1

消費されるリソースの観点から、ブロックされたスレッドと待機中のスレッドの違いは何ですか(CPUサイクルなど)。むしろ、notify()を呼び出して、1つのスレッドをウェイクアップし、他のスレッドを待機状態のままにします。または、notifyall()を呼び出して、すべての待機中のスレッドをブロック状態(実行可能に正常に移行したスレッドを除く)に移行させますか?

4

1 に答える 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 に答える