CompletableFuture.supplyAsync 如何指定线程池
时间: 2024-05-28 12:07:05 浏览: 273
CompletableFuture.supplyAsync方法可以使用指定的线程池来异步执行任务。您可以使用Executor参数来指定线程池。
以下是一个例子,演示如何创建自定义线程池,并将任务交给该线程池来执行:
```java
// 创建一个拥有3个线程的线程池
Executor executor = Executors.newFixedThreadPool(3);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 这个任务将在自定义线程池中运行
System.out.println("Task is running in thread: " + Thread.currentThread().getName());
return "Result";
}, executor);
// 等待任务执行完成并获取结果
String result = future.join();
System.out.println("Result: " + result);
```
在这个例子中,我们使用`Executors.newFixedThreadPool(3)`方法创建了一个拥有3个线程的线程池。`CompletableFuture.supplyAsync`方法的第二个参数是该线程池的实例。在future.join()调用之前,我们打印了任务执行的线程名称。
相关问题
CompletableFuture.supplyAsync 默认线程池
是的,CompletableFuture.supplyAsync方法默认使用ForkJoinPool.commonPool()作为线程池。如果你想使用自定义的线程池,可以使用CompletableFuture.supplyAsync(Supplier<U> supplier, Executor executor)方法,并将自定义的线程池作为参数传入。下面是一个例子:
```java
Executor executor = Executors.newFixedThreadPool(3);
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
System.out.println("当前线程:" + Thread.currentThread().getId());
return "Hello World";
}, executor);
System.out.println(future.get()); // 输出:Hello World
```
CompletableFuture.supplyAsync默认线程池
CompletableFuture.supplyAsync默认使用ForkJoinPool.commonPool()作为线程池。这是一个共享的线程池,用于执行异步任务。它的线程数是根据系统的可用处理器核心数来确定的。通常情况下,这个线程池是足够满足大部分异步任务的需求的。如果需要更细粒度地控制线程池的行为,可以使用supplyAsync方法的重载版本,传入自定义的Executor参数来指定线程池。
阅读全文