gpt4 book ai didi

java - 我如何有效地处理来自 Executor Service 的多个结果

转载 作者:行者123 更新时间:2023-11-29 06:44:28 26 4
gpt4 key购买 nike

我是 ExecutorService 的新手,但不确定我的方法。对于一个已知任务,我可能要处理多达 100 个线程。我使用下面的通用格式,我在其中创建 FutureTasks 列表,然后将它们提交给 ExecutorService。ExecutorService 返回并将这些未决结果添加到另一个列表。然后我遍历此列表,对每个未决结果调用 get()。

我的问题是:在所有 100 个线程都完成之前,这不会依次阻塞每个 get() 吗?有一个更好的方法吗 ?

我假设 get() 返回 Callable 实现的 call() 方法的结果是否正确?我正在使用默认的 FutureTask 类,并且没有对其进行子类化。

ExecutorService exec = Executors.newFixedThreadPool( NUM_THREADS );

List<JobClass> originalList = new ArrayList<JobClass>();

List<SomeOtherClass> pendingResult = new ArrayList<SomeOtherClass>();

List<Future<SomeOtherClass>> resultList = new ArrayList<Future<SomeOtherClass>>();

for( JobClass sc : originalList )
pendingResult.add( submit( sc );

for( Future<SomeOtherClass> future : futures )
resultList.add( future.get(5, TimeUnit.SECONDS) );

最佳答案

问得好,如果我没理解错的话,你担心完成任务的结果会被消耗掉。是的,线程会阻塞。 Java 对此的回答是使用 CompletionService .

如文档页面“一种将新异步任务的生成与已完成任务结果的消费分离的服务”中所述。

关于java - 我如何有效地处理来自 Executor Service 的多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7336879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com