为了账号安全,请及时绑定邮箱和手机立即绑定

将快速线程返回到池中,而不是等待慢线程

将快速线程返回到池中,而不是等待慢线程

繁星淼淼 2021-12-10 16:31:01
我们有两个单独的任务,我们并行运行,然后合并它们的结果。下面的代码片段相同。有时 task1 需要更多时间一些 task2 需要更多时间。正如您在合并函数中看到的,我们首先得到的是 task1 结果而不是 task2。当 task1 花费更多时间时,即使 task2 线程仍然很忙。有没有一种方法可以在该任务完成后立即释放线程,而不管其他任务状态如何。CompletableFuture<List<?>> task1 = CompletableFuture.supplyAsync(                () -> task1(), threadPoolTaskExecutor);        CompletableFuture<List<?>> task2 = CompletableFuture.supplyAsync(                () -> task2(), threadPoolTaskExecutor);        final CompletableFuture<List<?>> tasks = CompletableFuture.allOf(task1, task2).thenApply(                ignore -> Stream.of(task1, task2).map(cf -> cf.join()).collect(Collectors.toList()));        // merge two data        merge((List<DistributorZipCmTntZone>) tasks.join().get(0),                        (List<DistributorZipCmTntZone>) tasks.join().get(1));
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

使用 ExecutorCompletionService。它实现了一个队列,在任务完成时接收任务。在您这边,您编写 myCompletionService.take().get() 并在任务完成时接收任务。


查看完整回答
反对 回复 2021-12-10
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信