【Java并发】阻塞队列BlockingQueue和生产者-消费者模型笔记
2018-04-01 10:55
597 查看
阻塞队列BlockingQueue
BlockingQueue是线程安全的一个阻塞队列,常用于生产者-消费者模式中。BlockingQueue是一个先进先出的队列(当然这是普通队列也有的性质)。其中常用的操作如下:
put()和take()
两个都是阻塞的操作。即当队列已满时put,将会一直等待,直到队列不为满时再put。同理,当队列为空时take,也将会一直等待,直到队列不为空时,从队列头部拿取一个元素(get并remove)。
put和take是最常用的两个方法,也是唯一的两个阻塞方法。其他方法说明如下:
add(E o); //将指定的元素添加到此队列中(如果立即可行),在成功时返回 true,其他情况则抛出 IllegalStateException。 drainTo(Collection<? super E> c):移除此队列中所有可用的元素,并将它们添加到给定 collection 中。 drainTo(Collection<? super E> c,int maxElements);//最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中 offer(E o); //如果可能的话,将指定元素插入此队列中。 offer(E o, long timeout, TimeUnit unit); //将指定的元素插入此队列中,如果没有可用空间,将等待指定的等待时间(如果有必要)。 poll(long timeout, TimeUnit unit); //检索并移除此队列的头部,如果此队列中没有任何元素,则等待指定等待的时间(如果有必要)。 put(E o); //将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。 remainingCapacity(); //返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的元素数量;如果没有内部限制,则返回 Integer.MAX_VALUE。 take(); //检索并移除此队列的头部,如果此队列不存在任何元素,则一直等待。
生产者-消费者模型
生产者-消费者模式是为了解决两个组件之间的速度差异,以调高系统的效率。主要原理就是利用一个阻塞队列进行数据共享。若A生产的产品(数据)速度很快,而B消费产品的速度很慢,则A就将产品放到队列中,A可以继续生产,而不是一直等待;同理B从队列消费产品,而不是A生产一个B消费一个,这样就提高了效率并且降低了耦合度。相关文章推荐
- Java并发编程笔记 使用阻塞队列实现生产者-消费者模型
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- java消费者生产者模式及JDK之阻塞队列LinkedBlockingQueue实现
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- Java使用阻塞队列BlockingQueue实现生产者消费者
- Java阻塞队列BlockingQueue实现生产者消费者-只有代码-不讲原理
- 并发:阻塞队列与生产者消费者模型
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 生产者/消费者模式(阻塞队列) 一个类似于监听者模式的并发模型
- 【Java并发编程】之十三:生产者—消费者模型(含代码)
- Java线程:并发协作-生产者消费者模型 转自:http://lavasoft.blog.51cto.com/62575/221932
- Java线程:并发协作-生产者消费者模型
- Java线程:并发协作-生产者消费者模型
- Java线程:并发协作-生产者消费者模型
- 生产者-消费者模型的3种Java实现:synchronized,signal/notifyAll及BlockingQueue
- Java线程:并发协作-生产者消费者模型
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- BlockingQueue阻塞队列和生产者-消费者模式
- Java线程:并发协作-生产者消费者模型