我正在运行的服务器应用程序获取多个请求,这些请求是我想要使用任务系统处理的任务。Executor:等待特定任务完成
每个任务都表示为Runnable
,这将要求n
线程池中的线程数量,其中n
小于或等于线程池大小。线程池当然是必要的,以便而不是过多的CPU线程太多。
但是,其中一些任务可以是多线程的,有些则不能。这就是为什么一个任务可能需要等待所有特定线程完成以便合并来自这些线程的结果以获得最终结果。
如果一个使用多个Thread
情况下,人们可能会加入那些像这样:
try {
// Wait for all threads to finish their tasks
for (Thread thread : threads) {
thread.join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
// Finish job here ..
,但我需要像这样使用类似java.util.concurrent.Executor
或任何一个线程池的作品。
我可能是错在这里,但感觉就像你使用上的抽象水平错误执行人。如果你有一个需要* n *个线程运行的任务,我建议你让这个任务创建它自己的线程池,或者把它分解成更小的1线程任务。 – aioobe
@aioobe你可能会遇到太多效率不高的执行者/池 – bachr
在开始工作之前,可以让每个任务都做一些SharedSemaphore.acquire(n)。 – aioobe