我不知道爲什麼我的get方法不起作用。它返回「」。使用wait()和notifyAll()設置和獲取方法
我有生產者和消費者類,使用此類和緩衝區接口,只是已設置和獲取方法。生產者從文件中讀取消費者並將其寫入另一個文件中。生產者和消費者都使用線程。
請幫幫我。提前致謝。
import java.util.Stack;
public class synchronizedFile implements Buffer {
public Stack<String> StackBuffer = new Stack<String>();
public void set(String value) {
synchronized (StackBuffer) {
if (StackBuffer.size() <= 15) {
StackBuffer.push(value);
System.out.println(StackBuffer.toString());
StackBuffer.notifyAll();
System.out.println("Consumer notify");
} else {
try {
System.out.println("Produser is waitting--------------------------------");
StackBuffer.wait();
System.out.println("Consumer tries to write");
set(value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public String get() throws InterruptedException {
String Flag = " ";
synchronized (StackBuffer) {
if (!StackBuffer.isEmpty()) {
Flag = StackBuffer.firstElement();
StackBuffer.remove(StackBuffer.firstElement());
StackBuffer.notifyAll();
System.out.println("Producer notify");
return Flag;
} else {
StackBuffer.wait();
System.out.println("Consumer is waitting --------------------");
get();
}
}
return Flag;
}
}
您應該始終在測試您正在等待的狀況的循環內呼叫等待。閱讀文檔... – assylias 2013-02-15 13:59:37