我不知道为什么我的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