CompletableFuture中使用线程池
时间: 2023-10-17 18:53:01 浏览: 184
在使用`CompletableFuture`时,可以通过指定线程池来控制并发执行的线程。`CompletableFuture`提供了一些方法来配置线程池,例如`supplyAsync()`和`thenApplyAsync()`等。
下面是一个示例,演示如何在`CompletableFuture`中使用线程池:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 使用线程池执行异步任务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 异步任务逻辑
return "Hello, World!";
}, executor);
// 在异步任务完成后执行下一个任务
CompletableFuture<String> nextFuture = future.thenApplyAsync(result -> {
// 下一个任务逻辑
return result.toUpperCase();
}, executor);
// 阻塞等待结果
String result = nextFuture.join();
System.out.println(result);
// 关闭线程池
executor.shutdown();
}
}
```
在上面的示例中,我们创建了一个固定大小为5的线程池`executor`,然后使用`supplyAsync()`方法来执行一个异步任务,并指定了线程池。接着,在异步任务完成后,我们使用`thenApplyAsync()`方法来执行下一个任务,并同样指定了线程池。最后,我们使用`join()`方法阻塞等待结果,并输出结果。
通过使用线程池,我们可以更灵活地控制并发执行的线程数量,以及复用线程池中的线程,提高性能和效率。记得在不需要使用线程池时,及时关闭线程池以释放资源。
阅读全文