web-dev-qa-db-ja.com

Java JVMプロファイリング、スレッドステータス-「監視」ステータスとはどういう意味ですか?

enter image description here

VisualVM connect a multi thread Java application、thread has 4 status、すなわちrunning、sleeping、wait、Monitor。このMonitoring statusはどういう意味ですか?waitとMonitorの違いは何ですか?

77
user84592

これらの状態は Thread.State 列挙型。ドキュメントが言うように、「待機」とは:

次のいずれかのメソッドを呼び出しているため、スレッドは待機状態にあります。

  • タイムアウトなしのObject.wait
  • タイムアウトなしのThread.join
  • LockSupport.park

「モニター」はBLOCKED状態であり、スレッドはオブジェクトのロックを取得するために待機しています(入力しようとしているため) synchronizedブロックまたはメソッド(別のスレッドが既に関連付けられているロックを保持している場合)。

85
Jesper

これは「監視」ステータスではありません...スレッドがThread.State.BLOCKED状態。私は別の良い答えがあると思います、私はあなたに このリンク をより深い説明のために指すだけです

7
Grooveek

モニターは、スレッドがオブジェクトのロックを取得するのを待っていることを意味します。たとえば、あるスレッドが同期メソッドを実行していて、別のスレッドが同じオブジェクトでそれを呼び出そうとすると、メソッドの最初の呼び出しが完了するまでできません。これは、最初のスレッドがそのオブジェクトのモニターまたはロックを持っているため、2番目のスレッドは解放されるまで待機する必要があるためです。

Oracle Threading Tutorials から:

「同期は、組み込みロックまたはモニターロックとして知られる内部エンティティを中心に構築されます。(API仕様では、しばしばこのエンティティを単に「モニター」と呼びます。)組み込みロックは、同期の両方の側面で役割を果たしますオブジェクトの状態と、可視性に不可欠な発生前の関係の確立」

5
mogronalol