把CompletableFuture 交给线程池消费
时间: 2024-11-04 17:09:20 浏览: 32
`CompletableFuture` 是 Java 中的一个高级并发工具,它提供了一种异步编程模型,用于处理复杂的异步操作。如果你想要把 `CompletableFuture` 的任务交由线程池来处理,你可以这样做:
1. **创建 CompletableFuture**:首先,你需要创建一个 `CompletableFuture` 对象,这通常是通过 `supplyAsync()` 或者 `thenApplyAsync()` 等方法,它们接受一个 Callable 或者 Supplier 并将其提交到默认的线程池。
```java
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 这里编写耗时的计算逻辑
return "Task Result";
});
```
2. **提交给线程池**:如果你想要指定特定的线程池,可以使用 `execute()` 或 `submit()` 方法,将 `CompletableFuture` 提交给自定义线程池。例如,使用 `ForkJoinPool.commonPool()`。
```java
ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.submit(future::join); // 或 future.thenAccept(threadPool::execute);
```
3. **处理完成和错误**:`CompletableFuture` 支持多种方法来处理完成后的结果或错误,比如 `.thenApply()`, `.thenAccept()`, `.exceptionally()` 等。当任务完成后,你可以通过这些方法获取结果或者处理异常。
```java
future.thenAccept(result -> { /* 处理成功的结果 */ });
future.exceptionally(e -> { /* 处理错误 */ });
```
4. **关闭线程池**:记得在程序结束时关闭线程池,以防止资源泄露。
```java
// 在不再需要线程池后,关闭它
threadPool.shutdown();
```
阅读全文