用wait/notify实现生产者消费者模式。
之前在合理的停止一个Java线程里面用阻塞队列 BlockingQueue实现过生产者消费者模式。
以下的代码和main方法都写在一个文件里就行。
第一步:我们首先需要一个容器storage,我们将它定义为LinkedList是为了使用它的poll方法,一步实现拿出并删除,当然也可以使用ArrayList,然后使用get(0) + remove()拿出删除产品。
这个容器类一个干了三件事,1.定义容器并初始化。2.实现往容器放产品,即创建put方法,供生产者调用。3.实现从容器里取出产品的方法,即创建take()方法,供消费者者调用。
class EventStorage{
//容器大小
private int maxSize;
//容器
private LinkedList<Date> storage;
//使用构造方法初始化容器
public EventStorage(){
maxSize = 10;
storage = new LinkedList<Date>();
}
//生产者生产产品的方法
public synchronized void put(){
//当容器满了,线程就陷入等待并释放cpu
while (storage.size() == maxSize){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
storage.add(new Date());