java monitor - 队列

时间:2014-06-05 06:06:46

标签: java monitor

我有一个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();
  }
}

我知道,只有一个正在运行的进程可以在监视器内,所以我不了解以下内容:

  • 显示器究竟是什么?整个班级还是两个同步方法?
  • 有多少个等待线程的队列?只有一个用于整个班级,还是一个用于每个同步方法?
  • 如果监视器是全班的,如果类的定义中没有类似监视器的关键字,如何通过Java识别监视器?

1 个答案:

答案 0 :(得分:2)

对于您发布的代码,由于方法不是静态方法,因此监视器与对象关联,而不是类:对于类的每个实例,都有一个这样的监视器。

此类的每个实例都有一个等待线程队列。该队列适用于两个同步方法,因此如果一个线程正在执行其中一个方法,则没有其他线程可以执行这些方法中的任何一个。

Java中的每个对象和每个类都有自己的内置监视器。对象监视器适用于非静态方法,类监视器适用于静态方法。监视器是语言定义的一部分,不必显式声明或定义。