• java 如何快速实现异步调用方法


    什么是异步编程

    在实现异步调用之前,我们先了解一下,什么是异步编程?什么场景下适用等等情况。

    我们都知道,在传统的同步编程中,当一个操作开始执行时,程序会阻塞并等待该操作完成,然后才能继续执行后续代码。这种阻塞等待的方式可能会导致程序响应性能下降,因为在等待的过程中无法同时处理其他任务。这种显而易见的,在某种耗时的场景下,就显得无用了,甚至很影响体验。

    文件读写、网络请求或计算密集型任务,再如人脸融合特效等等,都是耗时的操作,这个时候,我们就需要异步编程了。

    异步编程则不会阻塞程序的执行,它将耗时的操作提交给后台线程或其他执行环境,并立即返回,使得程序可以继续执行其他任务。当耗时操作完成后,会通过回调、事件或者轮询等方式通知主线程,主线程再去处理操作结果或执行相应的回调函数。

    CompletableFuture

    今天我们就来了解下 CompletableFuture,它Java 8引入的一种功能强大的异步编程工具,可以用于实现复杂的异步操作和处理链式的异步任务。

    在这里插入图片描述

    从这个JDK里,可以看出,它既实现了 Future 接口,拥有 Future 所有的特性,比如可以使用 get() 方法获取返回值等。

    也实现了CompletionStage接口,提供了丰富的方法来管理异步任务的执行和处理任务结果。并且这些接口多达40多个,完全足够我们日常所使用了。

    1. supplyAsync

     1. CompletableFuture<T> supplyAsync(Supplier<? extends T> supplier)
    
    • 1

    该方法接受一个Supplier函数式接口作为参数,用于执行一个有返回值的异步任务。返回一个CompletableFuture对象,可以用于获取异步任务的执行结果。

    参数:

    Supplier:一个无参的函数式接口,用于提供异步任务的结果。

    2. runAsync

    2CompletableFuture<Void> runAsync(Runnable runnable)
    
    • 1

    该方法接受一个Runnable函数式接口作为参数,用于执行一个无返回值的异步任务。返回一个CompletableFuture对象,可以用于等待异步任务完成。

    参数:
    Runnable:一个无参的函数式接口,用于执行异步任务。

    3. thenApply

    3CompletableFuture<T> thenApply(Function<? super T,? extends U> function)
    
    • 1

    该方法接受一个Function函数式接口作为参数,用于对CompletableFuture的结果进行处理,并返回新的CompletableFuture对象。

    参数:
    Function:一个带有一个参数的函数式接口,用于对异步任务的结果进行转换或处理。

    4. thenAccept

    4CompletableFuture<Void> thenAccept(Consumer<? super T> consumer)
    
    • 1

    该方法接受一个Consumer函数式接口作为参数,用于对CompletableFuture的结果进行消费,没有返回值

    参数:

    Consumer:一个带有一个参数的函数式接口,用于消费异步任务的结果。

    5. thenRun

    5CompletableFuture<Void> thenRun(Runnable action)
    
    • 1

    该方法接受一个Runnable函数式接口作为参数,用于在CompletableFuture的结果完成后执行指定的操作,没有返回值。

    参数:
    BiFunction:一个带有两个参数的函数式接口,用于合并两个CompletableFuture的结果。

    6. thenCombine

    6CompletableFuture<U> thenCombine(CompletionStage<? extends V> other, BiFunction<? super T,? super U,? extends V> fn)
    
    • 1

    该方法接受一个CompletionStage对象和一个BiFunction函数式接口作为参数,用于等待当前CompletableFuture和另一个CompletionStage对象都完成后,将其结果进行组合处理,并返回新的CompletableFuture对象。

    参数:

    CompletionStage:代表一个异步任务的执行状态。

    返回值:

    • CompletableFuture:表示一个异步任务的结果,可以通过该对象获取异步任务的执行结果。
    • CompletableFuture:表示一个异步任务的结果,没有返回值。

    java 演示

    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.ExecutionException;
    
    public class CompletableFutureExample {
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            // 使用supplyAsync方法创建一个CompletableFuture对象来执行有返回值的异步任务
            CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
                System.out.println("异步任务正在执行");
                return 100;
            });
            
            // 使用thenApply方法对异步任务的结果进行处理,并返回新的CompletableFuture对象
            CompletableFuture<String> processedFuture = future.thenApply(result -> {
                System.out.println("对异步任务结果进行处理");
                return "处理后的结果:" + result * 2;
            });
            
            // 使用get方法阻塞当前线程,并获取异步任务的执行结果
            String result = processedFuture.get();
            System.out.println(result);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    异步任务正在执行
    对异步任务结果进行处理
    处理后的结果:200
    
    • 1
    • 2
    • 3
  • 相关阅读:
    SQL sever中的索引
    JAVA反射机制
    Java比较两个日期的间隔天数(案例详解)
    redhat7 破解(重置)root密码
    如何使用KEIL5快速建立FreeRTOS项目(附建立成功的源代码以及问题解析)
    盲盒网站遭遇DDoS攻击,高防ip是如何起到安全防护的?
    PS软件下载安装以基本配置
    学编程少走弯路
    springboot基于微信小程序的校园体育运动场地及器材租凭系统设计与实现毕业设计源码131052
    LeetCode_2358_分组的最大数量
  • 原文地址:https://blog.csdn.net/weixin_44427181/article/details/131699062