如何结合ExecutorService 使用CompletableFuture
时间: 2023-07-20 17:31:08 浏览: 157
结合ExecutorService使用CompletableFuture可以更加灵活地控制异步计算的线程池,从而提高程序的性能和可靠性。
下面是一个简单的例子:
```java
ExecutorService executor = Executors.newFixedThreadPool(4);
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
// do something
return 1;
}, executor);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
// do something
return 2;
}, executor);
CompletableFuture<Integer> future3 = CompletableFuture.supplyAsync(() -> {
// do something
return 3;
}, executor);
CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2, future3);
combinedFuture.thenRun(() -> {
try {
int result1 = future1.get();
int result2 = future2.get();
int result3 = future3.get();
// handle results
} catch (Exception e) {
// handle exception
}
});
executor.shutdown();
```
在这个例子中,我们首先创建了一个ExecutorService线程池对象executor,然后使用它来执行三个异步计算。
接着,我们使用CompletableFuture.allOf()方法来组合这三个异步计算,返回一个新的CompletableFuture对象combinedFuture。
最后,我们使用combinedFuture.thenRun()方法来指定当三个异步计算完成后执行的操作,包括获取三个异步计算的结果并进行处理。
注意,我们在程序结束时需要调用executor.shutdown()方法来关闭线程池。
阅读全文