我有一些代码大量使用线程池,我通过创建Collection<Callable<T>> tasks
和调用来使用线程池ExecutorService.invokeAll(tasks)
。
for (Future<Object> future : threadPool.invokeAll(tasks)) {
Object object = future.get();
// Calling thread effectively blocks on invokeAll().
}
在我的应用程序中,大小tasks
变化很大。事实上,大多数情况下都是用单个任务ExecutorService.invokeAll()
调用的。我正在使用的实现调用,其实现似乎总是在线程池中运行任务(从不在调用线程中)。invokeAll()
ThreadPoolExecutor.execute()
在单个任务的情况下,在当前线程中调用任务而不是将其发送到另一个线程会更有效吗?