gpt4 book ai didi

java - CompletableFuture runAsync 与新线程

转载 作者:行者123 更新时间:2023-12-02 09:26:30 29 4
gpt4 key购买 nike

上下文:我已阅读 this SO 线程讨论 CompletableFuture 和 Thread 之间的差异。

但我试图了解何时应该使用 new Thread() 而不是 runAsync()。

我知道 runAsyn() 对于短期/一次性并行任务更有效,因为我的程序可能会避免创建全新线程的开销,但对于长时间运行的操作我是否也应该考虑它?

在考虑使用其中一种而不是另一种之前,我应该注意哪些因素?

谢谢大家。

最佳答案

使用低级并发 API(例如 Thread)和其他 API 之间的区别不仅在于您想要完成的工作类型,还在于编程模型以及它们配置的容易程度任务运行的环境。

一般情况下,建议使用更高级别的API,例如CompletableFuture而不是直接使用Thread s。

I understand that runAsyn() is more efficient for short/one-time parallel task

好吧,也许吧,假设你打电话 runAsync ,指望它使用 fork-join 池。 runAsync方法重载了一种允许指定 java.util.concurrent.Executor 的方法。用于执行异步任务。

使用ExecutorService为了更好地控制线程池并使用 CompletableFuture.runAsyncCompletableFuture.supplyAsync具有指定执行程序服务(或不具有)通常都优于创建和运行 Thread直接反对。

没有什么特别赞成或反对使用 CompletableFuture API 来执行长时间运行的任务。但人们选择使用Thread s 还具有其他含义,其中:

  • CompletableFuture为响应式编程提供了更好的 API,而无需强制我们编写显式同步代码。 (直接使用线程时我们不会得到这个)
  • Future接口(interface)(由 CompletableFuture 实现)提供了其他额外的、明显的优势。

所以,简而言之:您可以(并且可能应该,如果考虑的替代方案是 Thread API)使用 CompletableFuture用于长时间运行的任务的 API。为了更好地控制线程池,您可以将其与执行器服务结合起来。

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

29 4 0