如何要求CompletableFuture使用非守护线程?

我写了以下代码:

 System.out.println("Main thread:" + Thread.currentThread().getId());

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {

try {

System.out.println("Before sleep thread:" + Thread.currentThread().getId(), + " isDaemon:" + Thread.currentThread().isDaemon());

Thread.sleep(100);

System.out.println("After sleep");

} catch (InterruptedException e) {

e.printStackTrace();

}

});

future.whenComplete((r, e) -> System.out.println("whenCompleted thread:" + Thread.currentThread().getId()));

并打印出:

Main thread:1

Before sleep thread:11 isDaemon:true

并完成。

我该如何改变这种行为?

我没有看到任何相关的runAsyncJava文档

回答:

在javadoc中的runAsync()说道:

返回一个新的CompletableFuture,它由运行给定操作的ForkJoinPool.commonPool()中运行的任务异步完成。

还有 另一个 版本runAsync(),你可以 一个ExecutorService。

因此:当默认的commonPool()不能执行您想要的操作时-

然后创建您自己的ExecutorService。

以上是 如何要求CompletableFuture使用非守护线程? 的全部内容, 来源链接: utcz.com/qa/424669.html

回到顶部