6

マルチスレッドプログラムでは、スレッドwait()の場合、cpuが他のスレッドを処理するためにスワップできるように、cpuの使用率があまり高くないのではないかと思います。

たとえば、100個のスレッドが同じタスクを一緒に開始するのに対し、50個のスレッドは実際にタスクを実行し、他の50個のスレッドは50個のタスクがすべて完了するまで待機します。後者の場合は、前者よりもはるかに短い時間で済みます。

誰かがこれについていくつかの読みを提案できますか?

4

1 に答える 1

4

waitメソッドには2つの目的があります。

  1. 現在実行中のスレッドがスリープ状態になるように通知します(CPUは使用しないでください)。
  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.
    }
}

必読:

java同期

于 2012-10-04T01:47:28.583 に答える