java - 方法 wait() 和 notifyAll() 不是静态的

标签 java multithreading wait producer-consumer notify

public synchronized  static int get() {
    while(cheia()==false){
        try{
            wait();
          }
        catch(InterruptedException e){
        }
    }

    if (fila[inicio] != 0) {
        int retornaValor = fila[inicio];
        fila[inicio] = 0;
        inicio++;
        if (inicio == size) {
            inicio = 0;
        }
        notifyAll();
        return retornaValor;
    }
    notifyAll();
    return 0;
}

为什么 wait() 和 notifyAll() 在这段代码中没有运行?

IDE 说:方法 wait()(或 notifyAll)不是静态的?

你能帮帮我吗?

最佳答案

这是因为你在一个静态方法中,这意味着该方法是在类实例而不是对象实例上执行的。 waitnotify 是实例方法。

改为创建一个对象锁,并使用它来进行同步和发信号。

private static final Object lock = new Object();

public static int get(){
   synchronized(lock){
      lock.wait();
      lock.notify();
      ...etc
   } 
}

关于java - 方法 wait() 和 notifyAll() 不是静态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281566/

相关文章:

c# - 有效锁定资源,由字符串标识

带有 wait(NULL) 的 C 程序没有像它应该的那样结束

java - hibernate/jpa 标准,查询对象是否存在于多对多关系中

.net - 中止阻塞线程

java - 从 Java 客户端中的多个 RabbitMQ 交换中读取,无需轮询

c# - 具有来自后台线程的回调的 WCF 服务?

c - 试图找出为什么子进程比应有的时间更早终止

php - 让 PHP 等到函数完成?

java - 实体中的数据为空,但发送时不为空。这怎么可能?

java - LWJGL glDrawElements(int, int, int, long) 不绘制任何内容,而 glDrawElements(int, IntBuffer) 正确绘制