是否有带有多个队列的开箱即用的线程池(可确保每个队列的串行处理)?
在所有任务中,我有一些必须按顺序处理(它们永远不能同时运行,必须按顺序处理)。
我实现了为必须串行执行的每组任务创建一个具有单个线程的独立线程池的功能。它有效,但我没有足够的资源。我无法控制组的数量,因此最终可能会产生大量同时运行的线程。
有什么办法可以通过单个线程池完成此任务?是否有一个带有多个阻塞队列的线程池,我可以确保每个队列的串行执行?
编辑:
只是强调我在第二段中所说的:我已经为需要串行执行的每组任务使用了一个单线程线程池解决了这个问题。但是,我无法继续使用此解决方案。组太多了,我无法拥有所有这些线程。
我找到了这个相关的问题,但是由于它不是最近,所以我仍然创建了我的问题。我正在做的一切都是为了避免重新发明轮子,但是似乎我别无选择。
Java是否有可索引的多队列线程池?
回答:
@SotiriosDelimanolis和@AlexeiKaigorodov提出的Akka似乎很有希望。唯一的缺点是我必须编写自己的轮询策略,以确保最终将我的任务添加到执行程序中(例如他示例中的无限循环)。
另一方面,@ OldCurmudgeon建议的Striped Executor
Service与我的问题完全匹配,可以作为自定义直接使用ExecutorService
。
这个神奇的线程池将确保所有具有相同stripeClass的Runnable可以按照它们提交的顺序执行,但是具有不同stripedClass的StripedRunners仍然可以独立执行。他想使用一个相对较小的线程池来服务大量Java
NIO客户端,但是这种方式使得可运行对象仍将按顺序执行。
甚至有关于在每个组(条带)中使用单个线程线程池的评论,如此处所建议:
提出了一些建议,例如为每个stripeClass配备一个SingleThreadExecutor。但是,这不能满足我们可以共享连接之间的线程的要求。
我认为这是简单易用的最佳解决方案。
以上是 是否有带有多个队列的开箱即用的线程池(可确保每个队列的串行处理)? 的全部内容, 来源链接: utcz.com/qa/413478.html