现在我有这个 Groovy 代码来运行一系列任务:
CountDownLatch latch = new CountDownLatch(tasks.size);
for( task in tasks ) {
Thread.start worker.curry(task, latch)
}
latch.await(300L, TimeUnit.SECONDS);
我想将并发线程的数量限制为一定数量 t
。现在的编写方式是,对于 n
任务,n
线程“立即”创建。我考虑过使用多个锁存器或某种回调,但无法想出一个好的解决方案。
解决方案应在运行线程低于 t
时立即启动新任务线程,直到运行数量达到 t
或没有未运行的任务。
最佳答案
你应该看看 GPars并使用列出的抽象之一。然后您可以指定要在 withPool() 中创建的数字。我喜欢 fork /加入:
withPool(4) { pool ->
runForkJoin(rootTask) { task ->
task.eachTask { forkChild(task) }
}
}
关于java - 如何在不阻塞的情况下使用设定数量的 Java/Groovy 线程执行任务池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7921473/