• Java并发编程()阻塞队列和生产者-消费者模式


    阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法。如果队列已经满了,那么put方法将阻塞直到有空间可用;如果队列为空,那么take方法将会阻塞直到有元素可用。队列可以是有界的也可以是无界的,无界队列永远都不会充满,因此无界队列上的put方法也永远不会阻塞。


    阻塞队列支持生产者-消费者这种设计模式。


    生产者-消费者模式的好处:

    1. 把"找到需要完成的工作"和"执行工作"这两个过程分离开来,并把工作项放到一个"待完成"列表中以便在随后处理,而不是立即处理。

    2. 生产者-消费者模式能简化开发过程,因为它消除了生产者和消费者之间的代码依赖性。

    3. 此外,还可以将生产数据的过程与使用数据的过程解耦开来以简化工作负载的管理,因为这两个过程的处理速率有所不同。


    生产者不需要知道消费者的标识或数量,或者它们是否是唯一的生产者,而只需要将数据放入队列即可。同样消费者也不需要知道生产者是谁,或者工作来自何处。

    BlockingQueue简化了生产者-消费者设计的实现过程,它支持任意数量的生产者和消费者。一种最常见的生产者-消费者设计模式就是线程池与工作队列的组合,在Executor执行任务框架就体现了这种设计模式。


    生产者和消费者的角色是相对的,某种环境中的消费者在另一种不同的环境中可能成为生产者。


    生产者和消费者模式可以将生产者和消费者的代码彼此解耦,但是它们的行为会通过共享工作队列间耦合在一起。如果消费者处理工作的速率能赶上生产者生成工作项的速率,通常不会为工作队列的大小设置边界,但这会导致之后需要重新设计系统架构。应该尽早地通过阻塞队列在设计中构建资源管理机制——这件事做得越好越容易。

  • 相关阅读:
    Ubuntu 拦截并监听 power button 的关机消息
    Android 电池管理系统架构总结 Android power and battery management architecture summaries
    Linux 内核代码风格
    Linux 内核工作队列之work_struct 学习总结
    微信小程序 登录流程规范解读
    微信小程序监听input输入并取值
    koala 编译scss不支持中文(包括中文注释),解决方案如下
    阻止冒泡和阻止默认事件的兼容写法
    使用setTimeout实现setInterval
    css实现视差滚动效果
  • 原文地址:https://www.cnblogs.com/tuhooo/p/9054326.html
Copyright © 2020-2023  润新知