介绍
Java最开始使用Thread进行异步编程,后来产生了Future,尽管Future针对Thread提升了好多,但还是存在好多缺陷。进一步产生了CompletableFuture,解决了Future的一些限制。
例如,解决了如下限制:
- 真正的非阻塞
- 能够以编程方式完成Future
- 可以异常处理
- 可以链接多个Futures
- 可以结合多个Futures的结果
方法说明
runAsync方法
- 用来异步执行一个方法,方法接受一个Runnable接口
- 方法并不会返回值
- 支持传递一个Executor作为第二个参数
- 通过thenRun*()方法可以继续执行其他方法
示例代码:
Demo1
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
System.out.println("task executing in async mode");
});
future.get();
}
输出如下:
task executing in async mode
Demo2
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
System.out.println("task executing in async mode");
}).thenRunAsync(() -> {
System.out.println("running callback chain");
});
future.get();
}
输出如下:
task executing in async mode
running callback chain
Demo3
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(2);
CompletableFuture<Void> future = Completab