【发布时间】:2018-06-28 04:08:03
【问题描述】:
是否有任何线程池实现也允许使用调用线程执行?
一些背景知识 - 我有一项服务需要调用许多相关服务(并对它们的结果进行一些处理)。我的服务是大规模并行的,可能使用多达 1000 个线程来处理并发请求(真的,我不是在开玩笑)。
当然,并行处理的一个常见模式是共享后台线程池,用于将工作从主线程中分出。它还有一个基本的耗尽问题,如果 1000 个服务线程中的每一个都提交一个长时间运行的请求,那么很容易完全耗尽池的所有容量。
另一个经典的解决方案是为每个服务线程使用一个私有线程池。这不是很吸引人,因为我无法使这些私人游泳池足够大。
所以我的想法是使用一种特殊类型的线程池执行器,它在调用线程中运行任务,如果它有空闲容量,则机会主义地使用后台线程池来运行任务。这样我可以保证调用线程在任何情况下都会取得一些进展,即使后台池已经耗尽。
有人知道这样的线程池实现吗?
【问题讨论】:
-
创建一个有界队列的
ThreadPoolExecutor和一个CallerRunsPolicy。 -
这行得通。在正常处理期间在调用者线程中运行任务仍然很好,但我可以忍受它。
标签: java multithreading architecture threadpool