如何创建使用主线程池的单独线程池

时间:2015-01-29 10:01:53

标签: java multithreading spring concurrency threadpool

我正在使用spring ThreadPoolExecutorFactoryBean。它是一个主线程池。在某些情况下,我需要创建CompletionService它确保我在完成顺序中获得了线程。

我的代码段:

ExecutorService pool = Executors.newFixedThreadPool(list.size());

CompletionService<T> completionService = new ExecutorCompletionService<T>(pool);

问题是我不想在这里创建固定的线程池,但是使用主线程轮询,只是为了避免创建过多的线程。

我当然无法将主线程池传递给完成服务,因为当我从完成服务completionService.take()获取值时,我会得到完全不相关的线程。

也许你可以帮我找到一种如何从主线程池创建某种固定线程池并将其传递给完成服务的方法。

非常感谢

1 个答案:

答案 0 :(得分:0)

这里有一个误解。 CompletionService只是接收任务,异步执行它们,并按任务完成的顺序使结果可用。 CompletionService#take()返回已提交任务的结果,而不是线程。

ExecutorCompletionService将任务执行委托给Executor,这可能很好地执行从其他来源提交的任务。因此,执行代码示例时应该没有问题。