与使用CompletableFuture相比,直接将代码传递给线程有什么好处?
Thread thread = new Thread(() -> {do something}); thread.start();
VS
CompletableFuture<Void> cf1 = CompletableFuture.runAsync(() -> {do something});
CompletableFuture.runAsync(...)在受 管理 的forkJoin-Pool中运行Runnable ,同时new Thread()创建一个 必须管理 的新线程。
CompletableFuture.runAsync(...)
new Thread()
“受管理” 是什么意思,它是预先分配的,线程在JVM中共享。当可运行对象完成时,该线程可重用于其他可运行对象。这样可以更好地利用资源,尤其是因为线程实例化是一项昂贵的操作- 不仅必须分配对象,还必须分配一些额外的非堆内存-线程堆栈。