首页 > 代码库 > 生产者/消费者问题的Java实现

生产者/消费者问题的Java实现

类似于Java阻塞队列的实现:

public class BlockingQueue {  private List queue = new LinkedList();  private int  limit = 10;//缓冲区大小  public BlockingQueue(int limit){    this.limit = limit;  }  public synchronized void enqueue(Object item)  throws InterruptedException  {    while(this.queue.size() == this.limit) {      wait();    }    if(this.queue.size() == 0) {      notifyAll();    }    this.queue.add(item);  }  public synchronized Object dequeue()  throws InterruptedException{    while(this.queue.size() == 0){      wait();    }    if(this.queue.size() == this.limit){      notifyAll();    }    return this.queue.remove(0);  }}

必须注意到,在enqueue和dequeue方法内部,只有队列的大小等于上限(limit)或者下限(0)时,才调用notifyAll方法。如果队 列的大小既不等于上限,也不等于下限,任何线程调用enqueue或者dequeue方法时,都不会阻塞,都能够正常的往队列中添加或者移除元素。

生产者/消费者问题的Java实现