CompletableFuture的用法
时间: 2023-10-28 18:46:06 浏览: 90
CompletableFuture是Java 8引入的一个新特性,它用于并发编程,让多个任务并行运行,从而提高程序的性能。CompletableFuture包含了所有Java中的Future接口和Executor接口的功能,同时又提供了更加强大和灵活的功能,例如回调函数、异常处理、线程池控制等等。使用CompletableFuture可以大大简化并发编程中的代码逻辑。
相关问题
CompletableFuture用法
CompletableFuture是jdk8的新特性,它实现了CompletionStage接口和Future接口,提供了一种更加方便和顺畅的方式来处理多任务的协同工作。使用CompletableFuture可以实现异步编程、流式处理和多个Future的组合处理。
具体使用CompletableFuture的方法如下:
1. 使用runAsync方法创建异步任务,该方法没有返回值。
示例代码:
```
CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> {
System.out.println("do something....");
});
cf.get(); //等待任务执行完成
```
2. 使用supplyAsync方法创建异步任务,该方法可以返回一个结果。
示例代码:
```
CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
System.out.println("do something....");
return "result";
});
cf.get(); //等待任务执行完成
```
3. 可以自定义线程池来执行异步任务。
示例代码:
```
ExecutorService executorService = Executors.newSingleThreadExecutor();
CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> {
System.out.println("do something....");
}, executorService);
cf.get(); //等待任务执行完成
```
4. 可以对多个CompletableFuture进行组合处理,例如使用thenCompose、thenCombine、thenAccept等方法。
以上是CompletableFuture的基本用法,你可以根据具体的需求选择合适的方法来使用。
CompletableFuture用法和常用Api
`CompletableFuture`是Java 8中引入的一个并发库,用于处理异步操作和并行计算。它提供了一种更为简洁、强大的方式来处理非阻塞代码,尤其是在处理回调地狱时非常有用。以下是`CompletableFuture`的一些主要用法和常见API:
1. **创建Future对象**:
- `supplyAsync()`方法可以异步地执行一个任务,返回一个`CompletableFuture`。
- `submit()`方法接受一个Runnable或Callable任务,并返回一个`Future`。
2. **链式调用(方法组合)**:
- 使用`.thenApply()`, `.thenAccept()`, `.thenCompose()`等方法,当前任务完成后执行下一个任务。
- `.thenCombine()`用于结合两个`CompletableFuture`的结果。
3. **异常处理**:
- `.exceptionally()`处理可能抛出的异常,返回一个新的`CompletableFuture`。
- `.handle()`处理正常结果和异常。
4. **同步操作**:
- `.get()`会阻塞直到任务完成并获取结果,不推荐在高并发环境中使用。
- `join()`方法也同步等待任务完成。
5. **并行和串行组合**:
- `.allOf()`等待多个`CompletableFuture`全部完成。
- `.anyOf()`等待其中一个完成。
- `.sequential()`将多个任务顺序执行。
6. **信号完成**:
- `complete()`手动设置结果。
- `completeExceptionally()`手动设置异常。
7. **取消任务**:
- 可以通过`Future`的`cancel()`方法取消任务。
阅读全文