JUC并发编程学习笔记(十四)异步回调
1.JUC并发编程学习笔记(二)Lock锁(重点)2.JUC并发编程学习笔记(一)认知进程和线程3.JUC并发编程学习笔记(三)生产者和消费者问题4.JUC并发编程学习笔记(四)8锁现象5.JUC并发编程学习(五)集合类不安全6.JUC并发编程学习笔记(六)Callable(简单)7.JUC并发编程学习笔记(七)常用的辅助类8.JUC并发编程学习笔记(八)读写锁9.JUC并发编程学习笔记(九)阻塞队列10.JUC并发编程学习笔记(十)线程池(重点)11.JUC并发编程学习(十一)四大函数式接口(必备)12.JUC并发编程学习笔记(十二)Stream流式计算13.JUC并发编程学习(十三)ForkJoin
14.JUC并发编程学习笔记(十四)异步回调
15.JUC并发编程学习笔记(十五)JMM16.JUC并发编程学习笔记(十七)彻底玩转单例模式17.JUC并发编程学习笔记(十九)原子引用18.JUC并发编程(终章)各种锁的理解19.JUC并发编程学习笔记(十六)Volatile20.JUC并发编程学习笔记(十八)深入理解CAS异步回调
Future设计的初衷:对将来的某个事件的结果进行建模
在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理
点进具体实现类中,查看方法,可以看到CompletableFuture中的异步内部类,里面是实现的异步方法
以及一些异步方法
通过CompletableFuture可以实现与Ajax一样的异步调用。
package org.example.asyn; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; /* * 异步调用:CompletableFuture * //异步执行 * //成功回调 * //失败回调 * */ public class Demo01 { public static void main(String[] args) throws ExecutionException, InterruptedException { CompletableHasReturn() ; } public static void CompletableNotReturn() throws ExecutionException, InterruptedException { //没有返回值的异步回调 CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println("执行异步请求完毕"); }); for (int i = 0; i < 5; i++) { TimeUnit.SECONDS.sleep(1); System.out.println(i); } //获取回调结果 future.get(); } public static void CompletableHasReturn() throws ExecutionException, InterruptedException { //有返回值的异步回调 CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { int i = 10/0; return 1024; }); System.out.println(future.whenComplete((t, u) -> {//编译 System.out.println("t:" + t);//t是正常的返回结果 System.out.println("u:" + u);//u是报错信息 }).exceptionally((e) -> {//编译异常 /Exception e e.printStackTrace(); return 123;//异常返回结果 }).get());//获取回调结果 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?