8

私はこのようなコーディングをしています。

  public class WaitTest {

  public static void main(String[] args) {
    Object object = new Object();
    try {
      synchronized (object) {
        object.wait(5000);
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

同期(オブジェクト)を使用するということは、WaitTestクラスがオブジェクトのモニターを所有していることを意味しますか?

4

2 に答える 2

11

クラスはモニターを所有していませんが、スレッドは所有しています。

あなたの例でWaitTestは、はモニターを所有していませんが、メインスレッドは所有しています。

特に、他のスレッドは、そのようなメソッドがある場合、そのメソッドのsynchronizedいずれかを呼び出すことを含め、同じオブジェクトのブロックに入ることができません。objectsynchronized

于 2013-03-06T08:23:00.740 に答える
1

スレッドがモニターを所有しており、ここにある公式のJDKドキュメントによると、モニターを所有する方法は3つあります。Object.notify

スレッドは、次の3つの方法のいずれかでオブジェクトのモニターの所有者になります。

  • そのオブジェクトの同期インスタンスメソッドを実行する。
  • オブジェクト上で同期する同期ステートメントの本体を実行する。
  • クラスタイプのオブジェクトの場合、そのクラスの同期された静的メソッドを実行します。
于 2017-09-11T08:08:22.863 に答える