completablefuture源码
时间: 2023-04-25 11:04:20 浏览: 93
CompletableFuture源码是Java 8中新增的一个类,用于异步编程和函数式编程。它继承自Future和CompletionStage接口,提供了一系列方法来处理异步任务的结果和异常。CompletableFuture源码中包含了许多内部类和方法,其中最重要的是CompletableFuture类本身,它实现了Future和CompletionStage接口,并提供了一系列静态工厂方法来创建CompletableFuture对象。这些工厂方法包括:completedFuture、supplyAsync、runAsync、allOf、anyOf等。CompletableFuture源码的核心思想是将异步任务的结果和异常封装到一个Future对象中,并提供一系列方法来处理这些结果和异常。它的设计思想和实现方式都非常优秀,是Java 8中非常重要的一个类。
相关问题
CompletableFuture 源码解析
CompletableFuture 是 Java 8 中新增的一个类,它提供了一种异步编程的方式,可以让我们更加方便地处理异步任务。CompletableFuture 的源码实现主要是基于 Java 的 Future 和 CompletionStage 接口,它提供了一系列的方法来处理异步任务的执行和结果的处理。其中,最常用的方法包括 thenApply、thenAccept、thenRun、thenCompose、thenCombine 等。这些方法可以让我们在异步任务执行完成后,对其结果进行处理,或者将多个异步任务组合起来执行。如果你想深入了解 CompletableFuture 的源码实现,可以参考 Java 8 的官方文档或者相关的开源实现。
CompletableFuture源码详解之java.util.concurrent.CompletableFuture#runAsync(java.lang.Runnable)
CompletableFuture是Java 8中新增的一个类,它提供了一种异步编程的方式,可以方便地进行异步操作和线程间的通信。其中,runAsync方法是CompletableFuture中的一个静态方法,用于执行一个Runnable任务,并返回一个CompletableFuture对象,其中不包含任何返回值。
下面我们来看一下runAsync方法的源码实现:
```java
public static CompletableFuture<Void> runAsync(Runnable runnable) {
return asyncRunStage(asyncPool, runnable);
}
private static CompletableFuture<Void> asyncRunStage(Executor e, Runnable f) {
if (f == null) throw new NullPointerException();
CompletableFuture<Void> d = new CompletableFuture<Void>();
e.execute(new AsyncRun(d, f));
return d;
}
static final class AsyncRun implements Runnable {
final CompletableFuture<Void> d; final Runnable f;
AsyncRun(CompletableFuture<Void> d, Runnable f) { this.d = d; this.f = f; }
public void run() {
try {
f.run();
d.complete(null);
} catch (Throwable ex) {
d.completeExceptionally(ex);
}
}
}
```
从代码中可以看出,runAsync方法会调用asyncRunStage方法,将任务和线程池传入异步执行。
在asyncRunStage方法中,首先会判断参数是否为空,如果为空就抛出NullPointerException异常。
接下来,会创建一个CompletableFuture对象d,并将它和任务f封装到AsyncRun对象中。
然后,通过线程池e执行AsyncRun对象,即执行任务f,并将结果存放到CompletableFuture对象d中。
如果任务f执行成功,就调用CompletableFuture对象的complete方法将结果设置为null;如果任务f执行失败,就调用CompletableFuture对象的completeExceptionally方法将异常信息设置到CompletableFuture对象中。
最后,异步执行过程结束,返回CompletableFuture对象d。
总结一下,CompletableFuture的runAsync方法通过将任务封装到AsyncRun对象中,并异步执行任务,最后将结果存放到CompletableFuture对象中,实现了异步编程和线程间通信。
阅读全文