Java 如何拥有对象';s监视器

Java 如何拥有对象';s监视器,java,Java,我有一些这样的编码 public class WaitTest { public static void main(String[] args) { Object object = new Object(); try { synchronized (object) { object.wait(5000); } } catch (InterruptedException e) { e.printStackTrac

我有一些这样的编码

  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类拥有对象的监视器

类不拥有监视器,线程拥有监视器。

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


特别是,没有其他线程能够在同一对象上输入
synchronized
块,包括调用
对象的
synchronized
方法(如果它有任何此类方法)。

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

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

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

主线程是唯一拥有
对象的锁的线程。类不能拥有锁,线程可以。使用synchronized(object)意味着主线程拥有对象监视器,不是吗?@zvzdhk:很好,我在阅读问题时没有发现这个微妙的误解。