我目前正在研究优先工作流用例,我必须实现生产者消费者逻辑。用例是 - 不同的作业集,分为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工作
。 。 。 。 以及一系列新工作的更多主题。
请提供方法的任何指示。
答案 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
类,它将阻塞队列与线程池配对,将线程池配置为队列的使用者LoadingCache
或java 8 ConcurrentHashMap
(使用.computeIfAbsent()
)获取或延迟为特定工作类型创建WorkHandler
WorkHandler
。