首页 > 编程语言 >JUC并发编程学习笔记(十四)异步回调

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

时间:2023-11-06 19:14:39浏览次数:47  
标签:JUC 异步 编程 System CompletableFuture println 回调 out

异步回调

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());//获取回调结果
    }
}

标签:JUC,异步,编程,System,CompletableFuture,println,回调,out
From: https://www.cnblogs.com/nhgtx/p/17806027.html

相关文章

  • (八)C#编程基础复习——for循环
    在某些情况下,我们可能需要重复执行某些代码,这时就需要用到C#中的循环语句,C#中支持for循环、foreach循环、while循环和dowhile循环等循环语句,使用for循环可以重复一部分代码,而且重复的次数是可以设定的,流程如下:代码示例:for(inti=1;i<=9;i++){Console.Write......
  • 利用Rust编程语言和tide库采集搜狗图片
    今天给大家带来一个用Rust编程语言和tide库编写一个爬虫程序,主要用于采集搜狗图片。一起来学习一下吧。```rust//导入所需的库usestd::io::{BufRead,BufReader};usestd::net::TcpStream;usestd::sync::mpsc;//定义一个消息通道来传递爬取的结果let(sender,receiver)......
  • 在Python中获取飞书群消息,你可以使用`feishu-python-sdk`这个库¹。这是一个用于和飞
    在Python中获取飞书群消息,你可以使用`feishu-python-sdk`这个库¹。这是一个用于和飞书开放平台交互的Python库,它支持同步调用和异步调用,实现了订阅事件和卡片交互回调¹。首先,你需要安装这个库,可以使用pip进行安装:```pythonpipinstallfeishu-python-sdk```然后,你可以使用以......
  • 和鲸为神经计算建模及编程培训班提供支持,聚焦学术前沿,助力人才培养
    探索与求知,培养与传承。让青年人更早地触摸到科学研究的前沿,便能吸引更多人才投身于学科建设。11月4日,由北京大学信息处理实验室开展进行,北京大学心理与认知科学学院院长吴思教授及课题组成员授课的第二届神经计算建模及编程培训班将再度开课。课程以北京大学神经信息处理课题组所......
  • 编程语言分类
    编程语言分类1.编译型将源代码通过编译器转化为目标代码的一个过程 源代码通常是高级语言编写代码执行编译器程序的称为编译器执行程序是执行目标代码优点:对于相同的源代码编译所产生的目标代码,它的执行速度更快,目标代码不需要通过编译器可以直接运行缺点:需要修改源程序......
  • JUC并发编程学习(十三)ForkJoin
    ForkJoin什么是ForkJoinForkJoin在JDK1.7,并发执行任务!大数据量时提高效率。大数据:MapReduce(把大任务拆分成小任务)ForkJoin特点:工作窃取为什么可以取窃取其他线程的任务呢?因为这里面维护的都是双端队列(即队列的两端都可以取元素)ForkJoin操作在java.util.concurrent......
  • 提升应用性能:Go中的同步与异步处理
    提升应用性能:Go中的同步与异步处理原创 TimLiu 爱发白日梦的后端 2023-11-0608:00 发表于广东收录于合集#go90个爱发白日梦的后端专注Go语言领域的发展,学习成为更牛逼的架构师,日常分享Go语言、架构、软件工具的使用。124篇原创内容公众号在开......
  • 面向结构编程
    面向结构的编程是一种基于任何协议都可以被结构替换这一事实的范例。这种方法的优点是性能。由于面向结构的方法基于使用静态调度的结构,因此面向协议的方法中的调度速度将与动态调度的协议显着不同。在面向结构的方法中,泛型和闭包有助于提供抽象。 ......
  • (七)C#编程基础复习——Switch语句
    switch语句有点类似ifelseif语句,都可以根据表达式执行某个语句块,使用之前要遵循以下几个条件:switch语句中表达式的值必须是一个整型或者枚举类型;在一个switch语句中可以有任意数量的case雨具,每个case关键字后面要跟一个表达式比较的值和一个冒号;case关键字后面的值必须与swi......
  • (六)C#编程基础复习——条件判断语句
    在C#中,if语句主要用于条件判断,C#中支持多种类型的if语句:if语句;ifelse语句;ifelseif语句;一、if语句if语句用于条件判断,其中包含一个布尔表达式,后面跟随着若干要执行的代码,当布尔表达式为真时,后面跟随的代码就会执行,如代码所示:intnum=12;if(num%2==0){C......