CompletableFuture.runAsync与CompletableFuture数组

问题描述 投票:0回答:1

我在项目中找到此代码:

int threadCount = 10;
CompletableFuture<?>[] futures = new CompletableFuture<?>[threadCount];
for (int i = 0; i < threadCount; i++) {
    futures[i] = CompletableFuture.runAsync(() -> { process.run(queue); });
}
// Wait all futures
CompletableFuture.allOf(futures).join();

这样做有什么区别?

ExecutorService threadPool = Executors.newFixedThreadPool(threadCount);
CompletableFuture.runAsync(() -> { process.run(queue); }, threadPool );

感谢您的解释。

java multithreading completable-future java-threads
1个回答
0
投票
int threadCount = 10;
CompletableFuture<?>[] futures = new CompletableFuture<?>[threadCount];
for (int i = 0; i < threadCount; i++) {
    futures[i] = CompletableFuture.runAsync(() -> { process.run(queue); });
}
// Wait all futures
CompletableFuture.allOf(futures).join();

在这种情况下,您将创建一组可完成的期货,这些期货是在公共ForkJoin池中执行异步代码的结果。然后过程等待,直到所有期货都完成。

ExecutorService threadPool = Executors.newFixedThreadPool(threadCount);
CompletableFuture.runAsync(() -> { process.run(queue); }, threadPool );

在这种情况下,您正在指定的线程池中执行代码。

这些代码块之间的差异

  • 它们在不同的线程池中执行(第一个在共同的ForkJoin中,这是可完成期货的默认值,第二个在指定的线程池中执行)
  • 在第一种情况下,您正在等待一组任务完成,在第二种情况下-您只是异步运行任务
© www.soinside.com 2019 - 2024. All rights reserved.