http://www.cnblogs.com/samqiu/p/4279836.html
这个博客已经很仔细的介绍了BlockingQueue.
我现在修改几个方法来说明BlockingQueue几个方法的区别。
1。修改等待时间
消费者等待时间非常短,没有产品加到队列
String data = queue.poll(20, TimeUnit.MILLISECONDS);
打印出的消息:
引用
启动生产者线程!
正在生产数据...
启动消费者线程!
启动生产者线程!
正在生产数据...
启动生产者线程!
正在生产数据...
正从队列获取数据...
退出消费者线程!
将数据:data:1放入队列...
将数据:data:2放入队列...
生产者要过两秒才会加入产品,现在没有产品消费者则强制退出。所以大于10后面数据放入的时候全是失败。
2。修改Blockingqueue的容量(用ArrayBlockingQueue)。
BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1);
上面的例子可以看到,从2开始,所有放入数据都是失败。
3。把消费者中poll改为take。
String data = queue.take();
结果是所有的生产者结束后,消费者会继续等待queue(被阻塞),如果不用BlockingQueue就需要用wait和notify来实现继续等待,而不BlockoingQueue内部实现了这个阻塞的功能。
理解BlockingQueue对JAVA 线程池里面的Queue也会有非常大的帮助。刚刚看线程池的时候不理解BlockingQueue。如果深刻理解了BlockingQueue后,对线程池也就知道了它的管理队列的方法,线程池的几种初始函数就是BlockingQueue的几种不同Type。
有边界的线程池;ArrayBlockingQueue
无边界的线程池:LinkedBlockingQueue
Direct handoffs:SynchronousQueue
分享到:
相关推荐
主要介绍了java并发学习之BlockingQueue实现生产者消费者详解,具有一定参考价值,需要的朋友可以了解下。
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
源码:BlockingQueue实现生产者消费者模式→ 输出结果截图 1. Queue接口 – 队列 public interface Queue extends Collection Collection的子接口,表示队列FIFO(First In First Out) 常用方法: (1)抛出异常...
主要介绍了Java多线程 BlockingQueue实现生产者消费者模型详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java多线程Queue、BlockingQueue和使用BlockingQueue实现生产消费者模型方法解析,涉及queue,BlockingQueue等有关内容,具有一定参考价值,需要的朋友可以参考。
BlockingQueue java 的工具类,初次要用于消费者,生产者的同步问题。
线程----BlockingQueue 的介绍说明
绍Java多线程(五)之BlockingQueue深入分析
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue...
类似java BlockingQueue,C++写的,支持Windows与Linux。
简单实现BlockingQueue,BlockingQueue源码详解
这个demo主要讲解了BlockingQueue的使用希望可以帮户需要的同学.
BlockingQueue支持两个附加操作的Queue:1)当Queue为空时,获取元素线程被阻塞直到Queue变为非空;2)当Queue满时,添加元素线程被阻塞直到Queue不满。BlockingQueue不允许元素为null,...常用于生产者消费者模式。
定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务
14-阻塞队列BlockingQueue实战及其原理分析二.pdf
我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事件(或称之为“消息”也可以)时,消费者(Consumer)能获得通知;如果没有事件时,消费者被堵塞,直到生产者发布了新的事件。 ...
我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事件(或称之为“消息”也可以)时,消费者(Consumer)能获得通知;如果没有事件时,消费者被堵塞,直到生产者发布了新的事件。 ...
BlockingQueue是一种特殊的Queue,若BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态直到BlocingkQueue进了新货才会被唤醒,下面是用BlockingQueue来实现Producer和Consumer的例子
10、阻塞队列BlockingQueue实战及其原理分析_
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列提供了四种处理方法: 抛出异常...