Java并发编程(九) CompletableFuture

2018-11-16  本文已影响0人  skyguard

下面我们来分析一下java并发编程里的一个工具类CompletableFuture。我们知道,Future机制是java中的一种异步获取返回结果的方式,在jdk1.8中,提供了CompletableFuture这个类,能够更好的操作Future,和处理返回的结果。
我们来看一下几个方法。先来看一下supplyAsync方法

public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier,
                                                   Executor executor) {
    return asyncSupplyStage(screenExecutor(executor), supplier);
}

到asyncSupplyStage方法

static <U> CompletableFuture<U> asyncSupplyStage(Executor e,
                                                 Supplier<U> f) {
    if (f == null) throw new NullPointerException();
    CompletableFuture<U> d = new CompletableFuture<U>();
    e.execute(new AsyncSupply<U>(d, f));
    return d;
}

调用execute方法执行任务
再来看一下runAsync方法

public static CompletableFuture<Void> runAsync(Runnable runnable,
                                               Executor executor) {
    return asyncRunStage(screenExecutor(executor), runnable);
}

到asyncRunStage方法

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;
}

也是调用execute方法执行
anyOf:判断多个CompletableFuture的执行结果,其中任意一个执行完返回执行结果
allOf:多个CompletableFuture都执行完返回执行结果
thenCompose:同时执行2个异步操作,将第一个CompletableFuture的返回值传递给第二个作为参数
thenCombine:结合2个CompletableFuture的执行结果,通过一个BiFunction将2个Completable的返回值结合
thenApply:对返回结果进行处理
thenAccept:消费返回的结果,无返回值
completeExceptionally:异常发生时的处理
whenComplete:任务执行完,对返回的结果进行处理
CompletableFuture的方法很多,可以对多个异步任务的返回结果进行组合,处理。
CompletableFuture的分析就到这里了。

上一篇下一篇

猜你喜欢

热点阅读