有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我们有两个单独的任务,我们并行运行,然后合并它们的结果。下面是相同的代码片段。有时任务1需要更多时间有些任务2需要更多时间。正如您在合并函数中首先看到的,我们得到的是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) 个答案

  1. # 1 楼答案

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