3
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)不是静态的?

你能帮助我吗?

4

4 回答 4

4

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

而是创建一个对象锁,并使用它来执行同步和信令。

private static final Object lock = new Object();

public static int get(){
   synchronized(lock){
      lock.wait();
      lock.notify();
      ...etc
   } 
}
于 2013-03-07T20:58:09.140 回答
3

同步静态方法锁在 Class 对象上,所以很自然地,你可以这样做:

[youclass].class.wait();
[youclass].class.notify();
于 2018-09-10T01:57:49.623 回答
1

您正在调用非静态方法,例如静态方法wait()notifyAll()从静态方法调用。你不能做这个。将您的 get 方法更改为此

public synchronized int get()
于 2013-03-07T20:58:35.627 回答
-1

你期望它有什么wait用?您必须等待通知某些特定对象,并且这里没有对象。

于 2013-03-07T20:57:51.107 回答