VisualVM connect a multi thread Java application、thread has 4 status、すなわちrunning、sleeping、wait、Monitor。このMonitoring statusはどういう意味ですか?waitとMonitorの違いは何ですか?
これらの状態は Thread.State
列挙型。ドキュメントが言うように、「待機」とは:
次のいずれかのメソッドを呼び出しているため、スレッドは待機状態にあります。
- タイムアウトなしのObject.wait
- タイムアウトなしのThread.join
- LockSupport.park
「モニター」はBLOCKED
状態であり、スレッドはオブジェクトのロックを取得するために待機しています(入力しようとしているため) synchronized
ブロックまたはメソッド(別のスレッドが既に関連付けられているロックを保持している場合)。
これは「監視」ステータスではありません...スレッドがThread.State.BLOCKED
状態。私は別の良い答えがあると思います、私はあなたに このリンク をより深い説明のために指すだけです
モニターは、スレッドがオブジェクトのロックを取得するのを待っていることを意味します。たとえば、あるスレッドが同期メソッドを実行していて、別のスレッドが同じオブジェクトでそれを呼び出そうとすると、メソッドの最初の呼び出しが完了するまでできません。これは、最初のスレッドがそのオブジェクトのモニターまたはロックを持っているため、2番目のスレッドは解放されるまで待機する必要があるためです。
Oracle Threading Tutorials から:
「同期は、組み込みロックまたはモニターロックとして知られる内部エンティティを中心に構築されます。(API仕様では、しばしばこのエンティティを単に「モニター」と呼びます。)組み込みロックは、同期の両方の側面で役割を果たしますオブジェクトの状態と、可視性に不可欠な発生前の関係の確立」