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:很好,我在阅读问题时没有发现这个微妙的误解。