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)不是静态的吗?
你能帮助我吗?
答案 0 :(得分:3)
这是因为您在静态方法中,这意味着该方法正在类实例而不是对象实例上执行。 wait
和notify
是实例方法。
改为创建对象锁,并使用它来进行同步和信令。
private static final Object lock = new Object();
public static int get(){
synchronized(lock){
lock.wait();
lock.notify();
...etc
}
}
答案 1 :(得分:2)
同步的静态方法锁定Class对象,因此自然可以做到:
[youclass].class.wait();
[youclass].class.notify();
答案 2 :(得分:1)
您正在从静态方法调用非静态方法,例如wait()
或notifyAll()
。你不能做这个。将您的get方法更改为此
public synchronized int get()
答案 3 :(得分:-1)
您对wait
的期望是什么?你必须等待某个特定的对象被通知,这里没有任何对象。