如何拥有对象的监视器

时间:2013-03-06 08:21:16

标签: java

我有这样的编码。

  public class WaitTest {

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

使用 synchronized(object)是否意味着WaitTest类拥有对象的监视器?

2 个答案:

答案 0 :(得分:8)

类没有监视器,线程也没有。

在您的示例中,WaitTest不拥有监视器,主线程支持。

特别是,没有其他线程可以在同一个对象上输入synchronized块,包括调用任何object的{​​{1}}方法,如果它有任何此类方法

答案 1 :(得分:0)

线程拥有监视器,根据官方JDK文档,有三种方式拥有监视器:Object.notify

  

线程以三种方式之一成为对象监视器的所有者:

     
      
  • 执行该对象的同步实例方法。
  •   
  • 执行在对象上同步的同步语句的主体。
  •   
  • 对于Class类型的对象,通过执行该类的同步静态方法。
  •