【发布时间】:2016-01-26 19:38:01
【问题描述】:
我一直在寻找“递归感知”的 java 线程池。也就是说,如果我创建一个固定大小为 N 的固定线程池,然后提交 N 个任务,一切都好,只要这些任务没有,反过来,向线程池提交额外的任务,然后等待结果。一旦发生这种情况,使用 Executors.newFixedThreadPool(int nThreads) 创建的我的 ThreadPool 就会挂起并且永远不会完成,因为我的 ThreadPool 已经饱和并且没有等待任务无法分配执行,因为池中的所有线程都在忙于等待它们完成。
我意识到这听起来很偏执,但我有一个案例,我有一个计算密集型应用程序,在某一时刻,我有 16,000 个可以并行执行的任务。线程之间没有通信或同步——我只需要等待它们完成执行。问题是,这 16,000 个任务中的每一个都可以分解成 X 个任务,这些任务可以再次并行执行,彼此之间不需要通信或同步。
危险/担忧是有人会决定尝试并行化这第二级步骤,这将非常合理地阻塞我的线程池。
是否有任何库可以创建和管理 ThreadPool 来识别我已经在属于线程池的线程中执行,然后自动安排任务在当前线程中执行,而不是等待待提交到 ThreadPool 的任务(但仅限于 ThreadPool 已经饱和且有待执行任务积压的情况?
我已经实现了一个非常粗略的演示/概念验证,但如果有标准的、经过测试的、可接受的实现可用,那会更开心。
【问题讨论】:
标签: java multithreading recursion concurrency