我正在使用spring ThreadPoolExecutorFactoryBean。它是一个主线程池。在某些情况下,我需要创建CompletionService,它可以确保线程按完成顺序排列。
我的代码片段:
ExecutorService pool = Executors.newFixedThreadPool(list.size());
CompletionService<T> completionService = new ExecutorCompletionService<T>(pool);问题是我不想在这里创建固定的线程池,而是使用主线程轮询,只是为了避免创建太多的线程。
当然,我不能将主线程池传递给完成服务,因为当我从完成服务completionService.take()中获取值时,我会得到完全不相关的线程。
也许你可以帮我找到一种方法,如何从主线程池创建某种固定的线程池,并将其传递给完成服务。
非常感谢
发布于 2015-01-29 23:21:33
这里有一个误解。CompletionService只是接收任务,异步执行它们,并按照任务完成的顺序提供结果。CompletionService#take()返回已提交任务的结果,而不是线程的结果。
ExecutorCompletionService将任务执行委托给Executor,后者可以很好地执行从其他来源提交的任务。因此,按照您的代码示例所示进行操作应该没有问题。
https://stackoverflow.com/questions/28211795
复制相似问题