1. ホーム
  2. java

[解決済み] スレッド状態のWAITとBLOCKEDの違い

2022-02-15 15:39:28

質問

スレッドステートWAITとスレッドステートBLOCKEDの違いは何ですか?

Thread.Stateのドキュメント :

ブロック
モニターロック待ちでブロックされているスレッドはこの状態です。

待機中
他のスレッドが特定のアクションを実行するのを無期限に待っているスレッドは、この状態にあります。

は、私にはその違いを説明していません。

どのように解決するのですか?

を呼び出すと、スレッドは待機状態になります。 wait() を Object の上に置く。これを 待機中 状態です。 スレッドが待機状態になると、他のスレッドが notify() または notifyAll() をオブジェクトに追加します。

このスレッドが通知されると、実行不可能になります。他のスレッドにも通知されるかもしれません( notifyAll() あるいは、最初のスレッドがまだ作業を終えていないため、そのチャンスが来るまでブロックされたままになっています。これは ブロックされる 状態です。あるスレッドがオブジェクトのロックを取得しようとしたときに、他のスレッドがすでにそのロックを保持していると、Blocked状態が発生します。

他のスレッドが立ち去り、そのスレッドにチャンスがあれば、Runnable状態に移行し、その後、JVMのスレッド機構に基づいて仕事をピックアップする資格があり、Run状態に移行する。