CompletableFuture
2020-11-23 10:47:50 0 举报
AI智能生成
CompletableFuture方法梳理
作者其他创作
大纲/内容
静态方法
同步变异步
同步变异步,有返回值,默认线程池:CompletableFuture<U> supplyAsync(Supplier<u> supplier)
同步变异步,有返回值,指定线程池:CompletableFuture<U> supplyAsync(Supplier<u> supplier,Executor executor)
同步变异步,无返回值,默认线程池:CompletableFuture<Void> runAsync(Runnable runnable)
同步变异步,无返回值,指定线程池:CompletableFuture<Void> runAsync(Runnable runnable,Executor executor)
静态构造器
构造一个已完成的cf实例:CompletableFuture<U> completedFuture(U value)
【jdk9】构造一个已完成的cs实例:CompletionStage<U> completedStage(U value)
【jdk9】构造一个已完成的异常cf实例:CompletableFuture<U> failedFuture(Throwable ex)
【jdk9】构造一个已完成的异常cs实例:CompletionStage<U> failedStage(Throwable ex)
合多为一
合并多个cf为一个,等待全部完成:CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)
合并多个cf为一个,等待其中之一完成:CompletableFuture<Object> anyOf(CompletableFuture<?>... cfs)
可延迟提交线程池
【jdk9】返回可延迟提交的指定线程池:Executor delayedExecutor(long delay, TimeUnit unit,Executor executor)
【jdk9】返回可延迟提交的默认线程池:Executor delayedExecutor(long delay, TimeUnit unit)
实例方法
CompletionStage接口
单任务结果消费
任务完成后执行 Function(结果转换,入参为结果,返回新结果)
CompletionStage<U> thenApply(Function<? super T,? extends U> fn)
CompletionStage<U> thenApply(Function<? super T,? extends U> fn)
异步执行,默认线程池:CompletableFuture<U> thenApplyAsync(Function fn)
异步执行,指定线程池:CompletableFuture<U> thenApplyAsync(Function fn, Executor executor)
任务完成后执行 Consumer(结果消费,入参为结果,不返回新结果)
CompletionStage<Void> thenAccept(Consumer<? super T> action)
CompletionStage<Void> thenAccept(Consumer<? super T> action)
异步执行,默认线程池:CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action)
异步执行,指定线程池:CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action,Executorexecutor)
任务完成后执行 Runnable(执行动作,无入参,不返回新结果)
CompletionStage<Void> thenRun(Runnable action)
CompletionStage<Void> thenRun(Runnable action)
异步执行,默认线程池:CompletionStage<Void> thenRunAsync(Runnable action)
异步执行,指定线程池:CompletionStage<Void> thenRunAsync(Runnable action,Executor executor)
单任务结果或异常消费
任务完成后执行BiFunction(结果转换,入参为结果或者异常,返回新结果)
CompletionStage<U> handle(BiFunction<? super T, Throwable, ? extends U> fn)
CompletionStage<U> handle(BiFunction<? super T, Throwable, ? extends U> fn)
异步执行,默认线程池:handleAsync(BiFunction fn)
异步执行,指定线程池:handleAsync(BiFunction fn,Executor executor)
任务完成后执行BiConsumer(结果消费,入参为结果或者异常,不返回新结果)
CompletionStage<T> whenComplete(BiConsumer<? super T, ? super Throwable> action)
CompletionStage<T> whenComplete(BiConsumer<? super T, ? super Throwable> action)
异步执行,默认线程池:whenCompleteAsync(BiConsumer action)
异步执行,指定线程池:whenCompleteAsync(BiConsumer action,Executor executor)
若任务异常,则执行Function(异常转换,入参为原任务的异常信息。若原任务无异常,则返回原任务结果,即不执行转换)
CompletionStage<T> exceptionally(Function<Throwable, ? extends T> fn)
CompletionStage<T> exceptionally(Function<Throwable, ? extends T> fn)
合并结果消费
合并另外一个任务,两个任务都完成后,执行BiFunction(结果转换,入参为两个任务结果,返回新结果)
CompletionStage<V> thenCombine(CompletionStage<? extends U> other,BiFunction<? super T,? super U,? extends V> fn)
CompletionStage<V> thenCombine(CompletionStage<? extends U> other,BiFunction<? super T,? super U,? extends V> fn)
异步执行,默认线程池: thenCombineAsync(CompletionStageother,BiFunction fn)
异步执行,指定线程池: thenCombineAsync(CompletionStageother,BiFunction fn,Executor executor)
合并另外一个任务,两个任务都完成后,执行BiConsumer(消费结果,入参为两个任务结果,不返回新结果)
CompletionStage<Void> thenAcceptBoth(CompletionStage<? extends U> other,BiConsumer<? super T, ? super U> action)
CompletionStage<Void> thenAcceptBoth(CompletionStage<? extends U> other,BiConsumer<? super T, ? super U> action)
异步执行,默认线程池: thenAcceptBothAsync(CompletionStage other,BiConsumer action)
异步执行,指定线程池:thenAcceptBothAsync(CompletionStage other,BiConsumer action, Executor executor)
合并另外一个任务,两个任务都完成后,执行Runnable(执行动作,无入参,不返回新结果)
CompletionStage<Void> runAfterBoth(CompletionStage<?> other,Runnable action)
CompletionStage<Void> runAfterBoth(CompletionStage<?> other,Runnable action)
异步执行,默认线程池:runAfterBothAsync(CompletionStage<?> other,Runnable action)
异步执行,指定线程池:runAfterBothAsync(CompletionStage<?> other,Runnable action,Executor executor)
任一结果消费
其中任一任务完成后,执行Function(结果转换,入参为已完成的任务结果,返回新结果,要求两个任务结果为同一类型)
CompletionStage<U> applyToEither(CompletionStage<? extends T> other,Function<? super T, U> fn)
CompletionStage<U> applyToEither(CompletionStage<? extends T> other,Function<? super T, U> fn)
异步执行,默认线程池:thenCombineAsync(CompletionStage other,BiFunction fn)
异步执行,指定线程池:thenCombineAsync(CompletionStage other,BiFunction fn,Executor executor)
其中任一任务完成后,执行Consumer(消费结果,入参为已完成的任务结果,不返回新结果,要求两个任务结果为同一类型)
CompletionStage<Void> acceptEither(CompletionStage<? extends T> other,Consumer<? super T> action)
CompletionStage<Void> acceptEither(CompletionStage<? extends T> other,Consumer<? super T> action)
异步执行,默认线程池:thenAcceptBothAsync(CompletionStage other,BiConsumer action)
异步执行,指定线程池:thenAcceptBothAsync(CompletionStage other,BiConsumer action,Executor executor)
其中任一任务完成后,执行Runnable(执行动作,无入参,不返回新结果,不要求两个任务结果类型相同)
CompletionStage<Void> runAfterEither(CompletionStage<?> other,Runnable action)
CompletionStage<Void> runAfterEither(CompletionStage<?> other,Runnable action)
异步执行,默认线程池:runAfterBothAsync(CompletionStage<?> other, Runnable action)
异步执行,指定线程池:runAfterBothAsync(CompletionStage<?> other,Runnable action,Executor executor)
级联任务
当原任务完成后,以其结果为参数,返回一个新任务【而不是新结果,类似 flatMap】
CompletionStage<U> thenCompose(Function<? super T, ? extends CompletionStage<U>> fn)
CompletionStage<U> thenCompose(Function<? super T, ? extends CompletionStage<U>> fn)
异步执行,默认线程池:thenComposeAsync(Function<? super T, ? extends CompletionStage<U>> fn)
异步执行,指定线程池:thenComposeAsync(Function<? super T, ? extends CompletionStage<U>> fn,Executor executor)
Future接口
isDone()
判断任务是否完成,三种完成的情况:normally(正常执行完毕),exceptionally(执行异常) or via cancellation(取消)
isCancelled()
是否已取消:在任务正常执行完成前取消,才为true,否则为false.
get()
阻塞获取结果 或抛出受检异常,需要显式进行try..catch处理
get(long timeout, TimeUnit unit)
超时阻塞获取结果
cancel(boolean mayInterruptIfRunning)
取消任务。若一个任务未完成,则以CancellationException异常结束。其相关的未完成的子任务也会以CompletionException结束
CompletableFuture
T join()
阻塞获取结果 或抛出非受检异常。get()方法抛出受检异常
T getNow(T valueIfAbsent)
若当前任务无结果则返回 valueIfAbsent,否则返回已经完成的任务结果
boolean complete(T value)
设置 任务结果,任务正常结束,之后的任务状态为已完成
boolean completeExceptionally(Throwable ex)
设置 任务异常结果,任务异常结束,之后的任务状态为已完成
boolean isCompletedExceptionally()
判断任务是否异常结束。异常可能的原因有:取消、显示设置任务异常结果(completeExceptionally)、任务动作执行异常等
void obtrudeValue(T value)
强制设值,无论任务是否已经完成。主要用于异常行为的恢复。
void obtrudeException(Throwable ex)
强制设置异常,无论任务是否已经完成。
int getNumberOfDependents()
返回依赖当前任务的任务数量。主要用于监控
【jdk9】CompletableFuture<T> completeAsync(Supplier<? extends T> supplier,Executor executor)
异步设置任务结果,使用指定线程池
【jdk9】CompletableFuture<T> completeAsync(Supplier<? extends T> supplier)
异步设置任务结果,使用默认线程池
【jdk9】CompletableFuture<U> newIncompleteFuture()
返回一个相同类型的未完成的Future
【jdk9】Executor defaultExecutor()
返回xxxAsync相关方法中所使用的默认线程池:ForkJoinPool#commonPool()(当设置的并行度大于1) 或者 每个任务一个线程
【jdk9】CompletableFuture<T> copy()
复制,相当于 thenApply(x -> x)
【jdk9】CompletionStage<T> minimalCompletionStage()
返回一个最小的阶段CompletionStage,若未被子类改写,则可做如下调用:minimalStage.toCompletableFuture().join()
【jdk9】CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
设置任务完成超时时间,若在指定时间内未正常完成,则任务会以异常(TimeoutException)结束
【jdk9】CompletableFuture<T> completeOnTimeout(T value, long timeout,TimeUnit unit)
设置任务完成超时时间,若在指定时间内未正常完成,则以给定的value为任务结果
收藏
收藏
0 条评论
下一页