CompletableFuture
2020-11-23 10:47:50 0 举报
AI智能生成
登录查看完整内容
CompletableFuture方法梳理
作者其他创作
大纲/内容
CompletableFuture
静态方法
同步变异步
同步变异步,有返回值,默认线程池:CompletableFuture<U> supplyAsync(Supplier<u> supplier)
同步变异步,无返回值,默认线程池:CompletableFuture<Void> runAsync(Runnable runnable)
静态构造器
构造一个已完成的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)
可延迟提交线程池
实例方法
CompletionStage接口
单任务结果消费
任务完成后执行 Function(结果转换,入参为结果,返回新结果)CompletionStage<U>font color=\"#c41230\
异步执行,默认线程池:CompletableFuture<U> thenApplyAsync(Function fn)
任务完成后执行 Consumer(结果消费,入参为结果,不返回新结果)CompletionStage<Void> thenAccept(Consumer<? super T> action)
异步执行,默认线程池:CompletionStage<Void> thenAcceptAsync(Consumer<? super T> action)
任务完成后执行 Runnable(执行动作,无入参,不返回新结果)CompletionStage<Void> thenRun(Runnable action)
异步执行,默认线程池:CompletionStage<Void> thenRunAsync(Runnable action)
单任务结果或异常消费
任务完成后执行BiFunction(结果转换,入参为结果或者异常,返回新结果)CompletionStage<U> font color=\"#c41230\
异步执行,默认线程池:handleAsync(BiFunction fn)
任务完成后执行BiConsumer(结果消费,入参为结果或者异常,不返回新结果)CompletionStage<T> font color=\"#c41230\
异步执行,默认线程池:whenCompleteAsync(BiConsumer action)
若任务异常,则执行Function(异常转换,入参为原任务的异常信息。若原任务无异常,则返回原任务结果,即不执行转换)CompletionStage<T> font color=\"#c41230\
合并结果消费
合并另外一个任务,两个任务都完成后,执行BiFunction(结果转换,入参为两个任务结果,返回新结果) CompletionStage<V> thenCombinefont color=\"#000000\
合并另外一个任务,两个任务都完成后,执行BiConsumer(消费结果,入参为两个任务结果,不返回新结果)CompletionStage<Void> thenAcceptBothfont color=\"#000000\
合并另外一个任务,两个任务都完成后,执行Runnable(执行动作,无入参,不返回新结果)CompletionStage<Void> runAfterBothfont color=\"#000000\
任一结果消费
其中任一任务完成后,执行Function(结果转换,入参为已完成的任务结果,返回新结果,要求两个任务结果为同一类型) CompletionStage<U> applyToEitherfont color=\"#000000\" style=\"font-weight: normal;\
其中任一任务完成后,执行Consumer(消费结果,入参为已完成的任务结果,不返回新结果,要求两个任务结果为同一类型) CompletionStage<Void> acceptEitherfont color=\"#000000\
其中任一任务完成后,执行Runnable(执行动作,无入参,不返回新结果,不要求两个任务结果类型相同)CompletionStage<Void> runAfterEitherfont color=\"#000000\
级联任务
当原任务完成后,以其结果为参数,返回一个新任务【而不是新结果,类似 flatMap】CompletionStage<U> font color=\"#c41230\
Future接口
isDone()
判断任务是否完成,三种完成的情况:normally(正常执行完毕),exceptionally(执行异常) or via cancellation(取消)
isCancelled()
是否已取消:在任务正常执行完成前取消,才为true,否则为false.
get()
阻塞获取结果 或抛出受检异常,需要显式进行try..catch处理
超时阻塞获取结果
cancel(boolean mayInterruptIfRunning)
取消任务。若一个任务未完成,则以CancellationException异常结束。其相关的未完成的子任务也会以CompletionException结束
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)
异步设置任务结果,使用默认线程池
【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()
设置任务完成超时时间,若在指定时间内未正常完成,则任务会以异常(TimeoutException)结束
设置任务完成超时时间,若在指定时间内未正常完成,则以给定的value为任务结果
收藏
收藏
0 条评论
回复 删除
下一页