`
hunankeda110
  • 浏览: 741442 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java中自动实现生产者消费者模式的队列

 
阅读更多

/**

    本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状 态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状 态,直到BlockingQueue里有空间才会被唤醒继续操作.

    本例再次实现11.4线程----条件Condition中介绍的篮子程序,不过这个篮子中最多能放的苹果数不是1,可以随意指定.当篮子满时,生产者进入等待状态,当篮子空时,消费者等待.

 */

/**

    使用BlockingQueue的关键技术点如下:

    1.BlockingQueue定义的常用方法如下:

        1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则招聘异常

        2)offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.

        3)put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.

        4)poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null

        5)take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止

    2.BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类

        1)ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的.

        2)LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的 BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含 的对象是以FIFO(先入先出)顺序排序的

        3)PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序.

        4)SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的.

    3.LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致 LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于 ArrayBlockingQueue.         

 */

0
0
分享到:
评论

相关推荐

    JAVA编程之Spring-activeMQ基础开发

    并比较了两种模式:生产者-消费者模式和发布-订阅模式的区别。 包含的特性如下: 1.开启activeMQ,访问http://localhost:8080/demo 2 在项目中,我们为消息的生产者和发布者分别注册了两个消费者和订阅者,当有消息...

    米哈游笔试题目-Java方向.docx

    生产者-消费者模型:需要设计一个多线程程序,其中有多个生产者和多个消费者,生产者不断产生数据放入共享队列,消费者从队列中取出数据进行消费。 线程池类:需要设计一个线程池类,能够动态管理线程数量,支持可...

    JAVA 范例大全 光盘 资源

    实例135 模拟生产者与消费者 392 实例136 仿迅雷下载文件 396 第15章 图形编程 403 实例137 多变的按钮 403 实例138 自制对话框 405 实例139 模仿QQ空间的电子相册 409 实例140 会动的七彩文字 413 实例141 ...

    Java JDK实例宝典

    消费者问题 8. 7 线程优先级 8. 8 列出虚拟机中所有的线程 8. 9 守护线程Daemon 8. 10 线程池 8. 11 一个死锁的例子 8. 12 定时器Timer 第9章 Java GUI 9. 1 日历 9. 2 开窗户...

    RabbitMq

    消息队列解决了什么问题 异步处理 1.串行方式 2.并行方式 3.异步处理 应用结耦 4. 流量削峰 ...Java操作RabbitMq simple 简单队列 work queues 工作队列 公平分发 轮询...竞争消费者模式:一个消息生产者,一个交换

    wireless.zip

    >第三是主要消费者采取的是自动确认消息模式?可以改成手动确定的模式,但是这样会造成消息重复消费的情况,主要是看guide的文章发现的 >下面评论的大神解决方案是手动维护偏移量,处理完业务逻辑在提交偏移量,为了...

    Java开发技术大全 电子版

    8.4.4生产者-消费者问题实例284 8.5本章小结287 第9章运行时类型识别288 9.1RTTI的作用288 9.2用Class类来加载对象289 9.3使用getClass()方法获取类信息290 9.4使用类标记292 9.5使用关键字instanceof判断...

    javaSE代码实例

    16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │ 高并发编程第一阶段29讲、如何实现一个自己的显式锁Lock精讲上.mp4 │ 高并发编程第一阶段30讲、如何实现一个自己的显式锁Lock精讲...

Global site tag (gtag.js) - Google Analytics