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同一个对象的块,包括调用任何 的object方法synchronized,如果它有任何这样的方法的话。

于 2013-03-06T08:23:00.740 回答
1

线程拥有监视器,根据此处的官方 JDK 文档,可以通过三种方式拥有监视器:Object.notify

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

  • 通过执行该对象的同步实例方法。
  • 通过执行在对象上同步的同步语句的主体。
  • 对于 Class 类型的对象,通过执行该类的同步静态方法。
于 2017-09-11T08:08:22.863 回答