Java並行プログラミング待機()、通知()および通知すべて()

Javaには組み込みの待機メカニズムがあり、シグナルを待機している間、スレッドが動作しなくなります。java.lang.Objectクラスは、この待機メカニズムを実装するために、wait()、notify()、notifyAll()の3つのメソッドを定義しています。

スレッドがオブジェクトのwait()メソッドを呼び出すと、別のスレッドが同じオブジェクトのnotify()メソッドを呼び出すまで、スレッドは非実行状態になります。wait()またはnotify()を呼び出すには、スレッドはまずそのオブジェクトのロックを取得する必要があります。つまり、スレッドは同期ブロックでwait()またはnotify()を呼び出す必要があります。

wait:オブジェクトロックを保持しているスレッドAがオブジェクトロック許可を解放し、CPUリソースを解放して待機状態になる準備ができていることを示します。
notify:オブジェクトロックを保持しているスレッドAがオブジェクトロックの権限を解放する準備ができていることを示し、オブジェクトロックを求めて競合しているスレッドXをウェイクアップするようにjvmに通知します。スレッドAの同期コードスコープが終了した後、スレッドXはオブジェクトロックアクセス許可を直接取得し、他の競合するスレッドは待機を続けます(スレッドXが同期されてオブジェクトロックが解放された場合でも、他の競合するスレッドは新しい通知、notifyAllが呼び出されるまで待機します)。
notifyAll:オブジェクトロックを保持しているスレッドAがオブジェクトロック権限を解放する準備ができていることを示し、オブジェクトロックを求めて競合しているすべてのスレッドをウェイクアップするようjvmに通知します。スレッドAの同期コードのスコープが終了すると、jvmはアルゴリズムを通じてオブジェクトロック権限をスレッドXに割り当てます。目覚めたすべてのスレッドはもう待機しません。スレッドX同期コードのスコープが終了すると、以前に起動されたすべてのスレッドが、JVMアルゴリズムによって決定されるオブジェクトロック権限を取得する可能性があります。

例:

 

注:この記事はオリジナルであり、許可なしにプラットフォーム上で複製することはできません。転載する必要がある場合は、作者に連絡して
ください。WeChat公開番号に従ってください。ナレッジトレーニングキャンプ、Java qun:16844592と通信できます。詳細については、

おすすめ

転載: www.cnblogs.com/bootcamp/p/12738251.html