java - CompletableFuture.runAsync 与 CompletableFuture 数组

标签 java multithreading completable-future java-threads

我在项目中找到了这段代码:

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 );

感谢您的解释。

最佳答案

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();

在这种情况下,您创建了一组可完成的 future,它们是在公共(public) ForkJoin 池中执行异步代码的结果。然后进程等待,直到所有 future 完成。

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

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

这些代码块之间的差异

  • 它们在不同的线程池中执行(第一个在公共(public) ForkJoin 中,这是可完成的 future 的默认值,第二个在指定的线程池中执行)
  • 在第一种情况下,您正在等待一组任务完成,在第二种情况下 - 您只是异步运行任务

关于java - CompletableFuture.runAsync 与 CompletableFuture 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60265870/

相关文章:

java - 如何测量从 URL 下载的 PDF 的大小

Java:多线程和二维线程

java - 多线程 Java TCP 客户端

java - C# Task.ContinueWith() 与 Java?

java - 获取 CompletableFuture.supplyAsync 的结果

java - 是否可以使用whenComplete(...)向CompletableFuture添加多个操作?

java - Java Graphics2D 是否可以产生绽放效果?如果是这样,如何?

java - 使用java中方法返回的字符串变量

java - 如何在 Android 中暂停线程的消息队列?

java - 如何计算多线程应用程序中的总执行时间