在java中使用监视器时的困惑

时间:2013-02-18 22:50:56

标签: java synchronization

我试图了解你在Java中如何使用监视器。据我所知,Java不提供像二进制或计数信号量那样可以创建的监视器。既然如此,当我看到人们做类似的事情时,究竟是什么意思:

while(!B){ 
    x.wait(); 
}

在这种情况下x究竟能是什么?它是否构建了一些模仿具有wait()方法的监视器操作的类?

为什么不这样做呢

while(!B){
    wait();
}

?它是这样你可以有多个显示器?如果是这样,为什么?在这一点上你似乎也可以使用信号量......

总的来说,我认为我的问题是真正了解显示器是什么以及如何正确使用它。我很感激你能给我的任何见解。

1 个答案:

答案 0 :(得分:1)

wait()java.lang.Object的一种方法。每个Java对象都有一个内部锁,称为监视器。

x.wait()等待变量x的对象引用。 wait()相当于this.wait(),因此会等待this引用的对象。

那就是说,wait()是一个非常低级且难以使用的抽象。你最好使用更高级的抽象,比如Java所拥有的...... Semaphore。在javadoc中查看。

另请查看Java's concurrency tutorial,其中包含这些主题。