一尘不染

线程与CompletableFuture

java

与使用CompletableFuture相比,直接将代码传递给线程有什么好处?

Thread thread = new Thread(() -> {do something});
thread.start();

VS

CompletableFuture<Void> cf1 =  
     CompletableFuture.runAsync(() -> {do something});

阅读 208

收藏
2020-12-03

共1个答案

一尘不染

CompletableFuture.runAsync(...)在受 管理 的forkJoin-Pool中运行Runnable ,同时new Thread()创建一个 必须管理 的新线程。

“受管理”
是什么意思,它是预先分配的,线程在JVM中共享。当可运行对象完成时,该线程可重用于其他可运行对象。这样可以更好地利用资源,尤其是因为线程实例化是一项昂贵的操作-
不仅必须分配对象,还必须分配一些额外的非堆内存-线程堆栈。

2020-12-03