Java JVMプロファイリング、スレッドステータス - 「モニタ」ステータスとはどういう意味ですか?
私はvisualVMを使用してマルチスレッドJavaアプリケーションを接続します。スレッドには、実行中、スリープ中、待機中の4つのステータスがあります。この監視ステータスは何を意味しますか?待機と監視の違いは何ですか?
Java JVMプロファイリング、スレッドステータス - 「モニタ」ステータスとはどういう意味ですか?
私はvisualVMを使用してマルチスレッドJavaアプリケーションを接続します。スレッドには、実行中、スリープ中、待機中の4つのステータスがあります。この監視ステータスは何を意味しますか?待機と監視の違いは何ですか?
これらの状態は、Thread.State
列挙型と同じです。ドキュメントが言うように、手段を「待って」:
:タイムアウトなし
Thread.joinで
- はObject.waitタイムアウトなし
- でLockSupport.park
は、 "モニタ"です0ステートでは、オブジェクトがロックを取得しようとしている(別のスレッドがすでに関連するロックを保持している間にブロックまたはメソッドを入力しようとしているため)。
これは「監視」ステータスではありません...スレッドがThread.State.BLOCKED
状態にあることを示します。私は別の良い答えがあることを知っている、私はちょうどthis linkにあなたを指摘します深い説明のため
モニターは、スレッドがオブジェクトのロックを達成するのを待っていることを意味します。たとえば、あるスレッドが同期メソッドを実行していて、別のスレッドが同じオブジェクトを呼び出すと、そのメソッドの最初の呼び出しが完了するまで実行できません。これは、最初のスレッドにそのオブジェクトのモニタまたはロックがあるため、2番目のスレッドは解放されるまで待機する必要があるためです。 Oracle Threading Tutorialsから
:
は、「同期は固有ロックとして知られている内部エンティティを中心に構築されたか、ロックを監視している(API仕様は、多くの場合、単にこのエンティティを指します。 『モニター』。)固有ロックをプレイします同期の両方の側面における役割:オブジェクトの状態への排他的アクセスを実施し、可視性に不可欠な先起こりの関係を確立すること。
「OPERA」のような新しいトピックに「モニタ」が「ロック」と同義語として使用されていることを知っておくと便利です。 –
どの同期化されたオブジェクト(またはコードの行)がスレッドをBLOCKED/Monitorにしているのかわかるかどうか? – user123321
@ user123321スレッドダンプを作成できます。 (「スレッド」タブの右上隅にあるボタン)ここで、スレッドが同期しようとしているものとロックを保持しているスレッドを確認できます。 – Fildor