CompletableFuture 详解
CompletableFuture 提供了丰富的方法来异步处理任务。
CompletableFuture.runAsync 用于执行没有返回值的任务,常用于不需要返回结果的业务 void
public static CompletableFuture<Void> runAsync(Runnable runnable) { return asyncRunStage(asyncPool, runnable); }
CompletableFuture.supplyAsync 用于执行有返回值的任务 , join() 获取任务执行后的返回结果。
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{ return "返回值" })
future.join()
获取返回任务值:
// 如果完成则返回结果,否则就抛出具体的异常 public T get() throws InterruptedException, ExecutionException // 最大时间等待返回结果,否则就抛出具体异常 public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException // 完成时返回结果值,否则抛出unchecked异常。为了更好地符合通用函数形式的使用,如果完成此 CompletableFuture所涉及的计算引发异常,则此方法将引发unchecked异常并将底层异常作为其原因 public T join() // 如果完成则返回结果值(或抛出任何遇到的异常),否则返回给定的 valueIfAbsent。 public T getNow(T valueIfAbsent) // 如果任务没有完成,返回的值设置为给定值 public boolean complete(T value) // 如果任务没有完成,就抛出给定异常 public boolean completeExceptionally(Throwable ex)
异步回调处理:thenApply和thenApplyAsync
thenApply 表示某个任务执行完成后执行的动作,即回调方法,会将该任务的执行结果即方法返回值作为入参传递到回调方法中,带有返回值
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{ return "返回值" }).thenApply((result)->{ //对返回结果处理 })
thenAccept() 方法没有返回值 ,仅用于消费任务结果
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{ return "返回值" }).thenAccept(result->{ //对返回结果处理 })
allOf() 等待所有任务都完成之后再执行
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(()->1); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(()->2); CompletableFuture<String> all = CompletableFuture.allOf(future1,future2); all.join()
exceptionally() 异常处理:
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{ throw new RuntimeException("任务异常"); }) future.exceptionally(ex->{ System.out.println(ex.getMessage()); })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-09-11 微信小程序订阅消息-java服务端整合mq实现订阅消息延时发送