当前位置: 首页 > 面试题库 >

是否有带有多个队列的开箱即用的线程池(可确保每个队列的串行处理)?

焦兴为
2023-03-14
问题内容

在所有任务中,我有一些必须按顺序处理(它们永远不能同时运行,必须按顺序处理)。

我实现了为必须串行执行的每组任务创建一个具有单个线程的独立线程池的功能。它有效,但我没有足够的资源。我无法控制组的数量,因此最终可能会产生大量同时运行的线程。

有什么办法可以通过单个线程池完成此任务?是否有一个带有多个阻塞队列的线程池,我可以确保每个队列的串行执行?

编辑:

只是强调我在第二段中所说的:我已经为需要串行执行的每组任务使用了一个单线程线程池解决了这个问题。但是,我无法继续使用此解决方案。组太多了,我无法拥有所有这些线程。

我找到了这个相关的问题,但是由于它不是最近,所以我仍然创建了我的问题。我正在做的一切都是为了避免重新发明轮子,但是似乎我别无选择。

Java是否有可索引的多队列线程池?


问题答案:

@SotiriosDelimanolis和@AlexeiKaigorodov提出的Akka似乎很有希望。唯一的缺点是我必须编写自己的轮询策略,以确保最终将我的任务添加到执行程序中(例如他示例中的无限循环)。

另一方面,@ OldCurmudgeon建议的Striped Executor
Service
与我的问题完全匹配,可以作为自定义直接使用ExecutorService

这个神奇的线程池将确保所有具有相同stripeClass的Runnable可以按照它们提交的顺序执行,但是具有不同stripedClass的StripedRunners仍然可以独立执行。他想使用一个相对较小的线程池来服务大量Java
NIO客户端,但是这种方式使得可运行对象仍将按顺序执行。

甚至有关于在每个组(条带)中使用单个线程线程池的评论,如此处所建议:

提出了一些建议,例如为每个stripeClass配备一个SingleThreadExecutor。但是,这不能满足我们可以共享连接之间的线程的要求。

我认为这是简单易用的最佳解决方案。



 类似资料:
  • 问题内容: 是否有这样的Java类: 可以通过ID添加可执行任务,其中保证所有具有相同ID的任务都不会同时运行 线程数可以限制为固定数量 Map的幼稚解决方案很容易解决(1),但难以管理(2)。同样,我所知道的所有线程池类都将从单个队列中提取,这意味着不能保证(1)。 欢迎使用涉及外部库的解决方案。 问题答案: 如果找不到开箱即用的东西,那么推出自己的产品就不难了。您可以做的一件事是将每个任务包装

  • 问题内容: 我已经看到了线程池执行程序的实现及其所提供的拒绝执行策略。但是,我有一个自定义要求- 我想拥有一个回调机制,在该机制中,当达到队列大小限制时,我会收到通知,并说何时队列大小减少到最大允许队列大小的80%。 我觉得可以通过子类化线程池执行程序来实现,但是已经有一个实现的版本吗?我很乐意在需要时提供更多详细信息和我的工作,以便提供清晰的信息。 问题答案: 我希望有一个回调机制,当达到队列大

  • 问题内容: 我正在使用的类创建用于运行Web服务器的请求处理程序的固定线程池: 并且说明是: 创建一个线程池,该线程池重用在共享的 无边界 队列上运行的一组固定线程。 但是,我正在寻找实现与缓冲池完全相同的线程池实现,除了使用有 界 队列。有这样的实现吗?还是我需要为固定线程池实现自己的包装器? 问题答案: 您想要做的是新建自己的ExecutorService,可能使用ThreadPoolExec

  • 我正计划创建可调整队列大小的可调整线程池。我正在使用unbounded LinkedBlockingQueue和一个外部设置,该设置控制排队的消息数量。最初,my corepoolsize和maxpoolsize是相等的。现在,如果我想在运行时更新我的线程池大小,我通过一个公共设置将corepoolsize和maxpoolsize设置为不同的值。我想知道你对这种做法有什么看法。 当maxpools

  • 本文向大家介绍C#多线程处理多个队列数据的方法,包括了C#多线程处理多个队列数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#多线程处理多个队列数据的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我有一个带有HornetQ的JBoss-6服务器和一个队列: 有一个不同的消费者(在不同的机器)连接到这个队列中,但只有一个 单一的 消费者是活动的时间。如果我关闭此使用者,则消息将立即由其他使用者之一处理。 由于我的消息需要一些耗时的处理,因此我希望多个使用者同时处理其唯一消息。 我记得在早期版本的JBoss中也有类似的情况,该设置可以正常工作。在Jboss-6中,消息传递系统运行良