マルチスレッドプログラムでは、スレッドwait()の場合、cpuが他のスレッドを処理するためにスワップできるように、cpuの使用率があまり高くないのではないかと思います。
たとえば、100個のスレッドが同じタスクを一緒に開始するのに対し、50個のスレッドは実際にタスクを実行し、他の50個のスレッドは50個のタスクがすべて完了するまで待機します。後者の場合は、前者よりもはるかに短い時間で済みます。
誰かがこれについていくつかの読みを提案できますか?
マルチスレッドプログラムでは、スレッドwait()の場合、cpuが他のスレッドを処理するためにスワップできるように、cpuの使用率があまり高くないのではないかと思います。
たとえば、100個のスレッドが同じタスクを一緒に開始するのに対し、50個のスレッドは実際にタスクを実行し、他の50個のスレッドは50個のタスクがすべて完了するまで待機します。後者の場合は、前者よりもはるかに短い時間で済みます。
誰かがこれについていくつかの読みを提案できますか?
waitメソッドには2つの目的があります。
メソッドが同期されたブロック内で何かを実行するときはいつでも、ブロック内にあるものはすべて、ロックされたオブジェクトが解放されるのを待つ必要があります。
synchronized (lockObject) {
// someone called notify() after taking the lock on
// lockObject or entered wait() so now it's my turn
while ( whatineedisnotready) {
wait(); // release the lock so others can enter their check
// now, if there are others waiting to run, they
// will have a chance at doing so.
}
}
必読: