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

异步回调

Future设计的初衷:对将来的某个事件的结果进行建模

在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理

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

以及一些异步方法

通过CompletableFuture可以实现与Ajax一样的异步调用。

java 复制代码
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());//获取回调结果
    }
}
相关推荐
71777718 分钟前
不止工具集成:基于 Gitee 软件工厂构建 DevSecOps 研发治理底座
java·服务器·gitee
gis开发之家25 分钟前
Spring Boot 4 深度解析——参数接收大全:@RequestParam、@PathVariable、@RequestBody
java·spring boot·后端·spring
(轻舟已过万重山)41 分钟前
D1 · 融合蓝图:Spring AI + 虚拟线程 + 服务网格——现代后端统一底座
java·人工智能·spring
SamDeepThinking1 小时前
警惕那些很长时间没有编写任何代码、却在设计系统的人
java·后端·架构
莫得感情 o1 小时前
并发 13 · 异步编排
java·并发
TizzyGoodhealth1 小时前
从零到一搭建Spring‑AI原生Tool‑Calling AI Agent|架构对比+完整实战源码+踩坑实录
java·ai·知识库·rag·ai agent·spring ai
mmsx1 小时前
置灰按钮为什么自己又“亮“了?一次状态缓存“双写冲突“的排查记录
java·缓存·bug·livedata
rannn_1111 小时前
【力扣hot100】图论专题+模板|DFS、BFS、拓扑排序...
java·算法·leetcode·深度优先·图论
用户3126874877201 小时前
ReentrantLock 到底怎么排队的?AQS 源码拆解
java
Zane19941 小时前
ArrayList 插入慢,LinkedList 一定快吗
java·后端