码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-09 02:34:37      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   java   sp   div   c   问题   

类似于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实现

标签:style   blog   color   io   java   sp   div   c   问题   

原文地址:http://www.cnblogs.com/xxwacm/p/4011952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!