首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可能有一组线程池共享来自大型线程池的线程,而不是创建新线程池?

是否可能有一组线程池共享来自大型线程池的线程,而不是创建新线程池?
EN

Stack Overflow用户
提问于 2015-05-14 23:57:22
回答 2查看 1.4K关注 0票数 2

是否可能有一组线程池共享来自大型线程池的线程,而不是创建新线程池?

在我们的RESTful API应用程序中,一个请求可能涉及几个并行任务。为了提高性能,我们希望在线程池中执行并行任务,线程池有固定的线程数(例如200)。但是我们也希望限制每个请求可以使用的最大线程数。因此,我在想,是否可以为每个请求创建一个具有最大池大小的子线程池,它不会自行创建线程,而是尝试从全局线程池中获取一个新线程,并在没有可用线程的情况下将作业放入队列。

有人做过类似的事吗?或者还有其他更好的解决方案吗?

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 13:08:37

与其使用线程池,不如考虑执行程序。执行器由两件事组成:一个作业队列和一个线程池。您需要的是为每个请求提供一个轻量级的执行器,该请求有一个作业队列,但没有线程。相反,它将作业从其队列传递给主执行器(主执行器拥有所有线程)。诀窍是,轻量级执行者计算它向主执行器提交了多少作业,并在数量超过限制时停止传递作业。在传递给主执行器之前,每个作业都被包装在一个可运行的对象中,该对象( a)具有对父轻量级执行器的引用,b)执行包装作业,c)在作业完成时通知引用的执行器,以便执行器可以将另一个作业传递给主执行器(如果队列中没有作业,则只需减少作业计数器)。

票数 2
EN

Stack Overflow用户

发布于 2015-05-15 13:21:51

您可以为每个任务创建一个线程池,例如Executors.newFixedThreadPool(10),这将执行您所要求的任务,这可能会导致创建特定任务实例不需要的线程的效率低下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30249392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档