优先生产者消费者

时间:2014-05-15 00:59:02

标签: java multithreading

我目前正在研究优先工作流用例,我必须实现生产者消费者逻辑。用例是 - 不同的作业集,分为3种类型,进入阻塞队列,有3个线程或一个线程组供消费。

队列中的作业

a1,a2,a3 ... an,b1,b2,b3 ... bn c1,c2,c3 ... cn,d1 ...,e1 .....

消费者线程

CT1,CT2,CT3

我的问题是如何协调此消费者线程或组以便:

CT1处理a1-作业

CT2流程b1-bn工作

CT3流程c1-cn工作

。 。 。 。 以及一系列新工作的更多主题。

请提供方法的任何指示。

2 个答案:

答案 0 :(得分:1)

您还可以将作业分发到不同的队列,让不同的线程或线程池在不同的队列中查找作业。

队列中的作业a:a1,a2,...,

队列b中的作业:b1,b2,...,bn

队列中的作业c:c1,c2,...,cn

...

正在执行作业的线程:CT1,CT2,CT3

CT1正在从队列a执行作业,CT2从队列b执行作业,CT3从队列c执行作业。

答案 1 :(得分:0)

如果我理解了这个问题,你想要一个绑定到阻塞队列的工作线程或池,并且在添加新工作类型时按需创建这个线程队列对。

如果是这种情况,你可以

  • 定义一个WorkHandler类,它将阻塞队列与线程池配对,将线程池配置为队列的使用者
  • 使用guava LoadingCache或java 8 ConcurrentHashMap(使用.computeIfAbsent())获取或延迟为特定工作类型创建WorkHandler
  • 要处理每个新工作项,请在缓存中查找其工作类型,然后将该项添加到它提供的WorkHandler