JUC并发编程学习笔记(十四)异步回调

南飓风  金牌会员 | 2023-12-7 06:05:18 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 903|帖子 903|积分 2709

异步回调

Future设计的初衷:对将来的某个事件的结果进行建模
在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理


点进具体实现类中,查看方法,可以看到CompletableFuture中的异步内部类,里面是实现的异步方法

以及一些异步方法

通过CompletableFuture可以实现与Ajax一样的异步调用。
  1. package org.example.asyn;
  2. import java.util.concurrent.CompletableFuture;
  3. import java.util.concurrent.ExecutionException;
  4. import java.util.concurrent.TimeUnit;
  5. /*
  6. * 异步调用:CompletableFuture
  7. * //异步执行
  8. * //成功回调
  9. * //失败回调
  10. * */
  11. public class Demo01 {
  12.     public static void main(String[] args) throws ExecutionException, InterruptedException {
  13.         CompletableHasReturn() ;
  14.     }
  15.     public static void CompletableNotReturn() throws ExecutionException, InterruptedException {
  16.         //没有返回值的异步回调
  17.         CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
  18.             try {
  19.                 TimeUnit.SECONDS.sleep(3);
  20.             } catch (InterruptedException e) {
  21.                 throw new RuntimeException(e);
  22.             }
  23.             System.out.println("执行异步请求完毕");
  24.         });
  25.         for (int i = 0; i < 5; i++) {
  26.             TimeUnit.SECONDS.sleep(1);
  27.             System.out.println(i);
  28.         }
  29.         //获取回调结果
  30.         future.get();
  31.     }
  32.     public static void CompletableHasReturn() throws ExecutionException, InterruptedException {
  33.         //有返回值的异步回调
  34.         CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
  35.             int i = 10/0;
  36.             return 1024;
  37.         });
  38.         System.out.println(future.whenComplete((t, u) -> {//编译
  39.             System.out.println("t:" + t);//t是正常的返回结果
  40.             System.out.println("u:" + u);//u是报错信息
  41.         }).exceptionally((e) -> {//编译异常 /Exception e
  42.             e.printStackTrace();
  43.             return 123;//异常返回结果
  44.         }).get());//获取回调结果
  45.     }
  46. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表