2011-07-15 3 views

答えて

78

これらの状態は、Thread.State列挙型と同じです。ドキュメントが言うように、手段を「待って」:

スレッドが原因次のいずれかの方法を呼び出すために待機状態にある

:タイムアウトなし

  • Thread.joinで

    • はObject.waitタイムアウトなし
    • でLockSupport.park
  • は、 "モニタ"です0ステートでは、オブジェクトがロックを取得しようとしている(別のスレッドがすでに関連するロックを保持している間にブロックまたはメソッド​​を入力しようとしているため)。

    +21

    「OPERA」のような新しいトピックに「モニタ」が「ロック」と同義語として使用されていることを知っておくと便利です。 –

    +5

    どの同期化されたオブジェクト(またはコードの行)がスレッドをBLOCKED/Monitorにしているのかわかるかどうか? – user123321

    +2

    @ user123321スレッドダンプを作成できます。 (「スレッド」タブの右上隅にあるボタン)ここで、スレッドが同期しようとしているものとロックを保持しているスレッドを確認できます。 – Fildor

    7

    これは「監視」ステータスではありません...スレッドがThread.State.BLOCKED状態にあることを示します。私は別の良い答えがあることを知っている、私はちょうどthis linkにあなたを指摘します深い説明のため

    5

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

    は、「同期は固有ロックとして知られている内部エンティティを中心に構築されたか、ロックを監視している(API仕様は、多くの場合、単にこのエンティティを指します。 『モニター』。)固有ロックをプレイします同期の両方の側面における役割:オブジェクトの状態への排他的アクセスを実施し、可視性に不可欠な先起こりの関係を確立すること。

    関連する問題