《Java多线程编程实战》——第七章Producer-Consumer(生产者/消费者)模式

Producer-Consumer模式的核心是通过通道对数据(或任务)的生产者和消费者进行解耦,从而使二者的处理速率相对来说互不影响。

类图

BlockingQueueChannel:

  • 当队列满时,将当前线程挂起直到队列非满
  • 当队列为空时,将当前线程挂起直到队列非空

通道积压的常见解决方法:

  • 使用有界阻塞队列
  • 使用带流量控制的无界阻塞队列

工作窃取算法:
一个通道可以对应一个或者多个队列实例。当一个消费者线程处理完该线程对应的队列中的“产品”时,可以继续从其他消费者线程对应的队列中取出“产品”进行处理。
线程的停止:
当某个服务的所有Producer参与者的工作者线程都停止之后,再停止该服务涉及的Consumer参与者的工作者线程。
停止Consumer参与者的工作者线程前是否考虑要等待其处理完所有待处理的“产品”或者将这些“产品”做个备份也是个问题。

猜你喜欢

转载自blog.csdn.net/wsjtwmy/article/details/84554806
今日推荐