我有一个java监视器,但我需要一些解释:
class Test
{
private int data;
private boolean full = false;
public synchronized int receive() {
while (!full) wait();
full = false;
return data;
}
public synchronized void send(int value) {
data = value;
full = true;
notify();
}
}
我知道,只有一个正在运行的进程可以在监视器内,所以我不了解以下内容:
答案 0 :(得分:2)
对于您发布的代码,由于方法不是静态方法,因此监视器与对象关联,而不是类:对于类的每个实例,都有一个这样的监视器。
此类的每个实例都有一个等待线程队列。该队列适用于两个同步方法,因此如果一个线程正在执行其中一个方法,则没有其他线程可以执行这些方法中的任何一个。
Java中的每个对象和每个类都有自己的内置监视器。对象监视器适用于非静态方法,类监视器适用于静态方法。监视器是语言定义的一部分,不必显式声明或定义。