首页 > 其他分享 >CompletableFuture

CompletableFuture

时间:2023-05-27 19:45:45浏览次数:25  
标签:异步 String System CompletableFuture println out

 

 

 

 

一、异步任务创建

1.1、runAsync

分析源码:依靠创建一个Runnable() 接口实现类  对象   返回 CompletableFuture<Void>

public static CompletableFuture<Void> runAsync(Runnable runnable) {
        return asyncRunStage(asyncPool, runnable);
    }

底层通过  开启一个线程去执行

public static void main(String[] args) throws InterruptedException {

        System.out.println("主线程程序开始 执行");

        // 使用实现Runnable 匿名内部类
        CompletableFuture.runAsync(new Runnable() {
            @Override
            public void run() {
                System.out.println("异步线程执行异步任务");
            }
        });

        System.out.println("主线程程序执行  结束 ");

    }

 

用Lambda 简写

public static void main(String[] args) throws InterruptedException {

        System.out.println("程序开始 执行");

        // 使用实现Runnable 匿名内部类
        CompletableFuture.runAsync(() -> {
            System.out.println("异步线程执行异步任务");
        });

        // 让主线程睡3秒,等待一下异步任务执行
        Thread.sleep(3000);

        System.out.println("程序执行  结束 ");

    }

 

 

1.2、supplyAsync

实现一个或传入一个 Supplier<U> 对象,返回一个 CompletableFuture<U>

U 传入的对象类型

    public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) {
        return asyncSupplyStage(asyncPool, supplier);
    }

 

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        System.out.println("主线程  开始执行");

        CompletableFuture<String> newFuture = CompletableFuture.supplyAsync(() -> {

            String threadName = Thread.currentThread().getName();
            String st = "异步任务";
            System.out.println("正在执行异步任务的子线程:" + threadName);
            return st;

        });

        // 会阻塞异步任务线程 等待获取到结果
        String result = newFuture.get();
        System.out.println("异步结果:" + result);

        System.out.println("主线程 执行结束");
        
    }

 

标签:异步,String,System,CompletableFuture,println,out
From: https://www.cnblogs.com/niunai/p/17437213.html

相关文章

  • Java的CompletableFuture,Java的多线程开发
    三、Java8的CompletableFuture,Java的多线程开发1、CompletableFuture的常用方法以后用到再加runAsync():开启异步(创建线程执行任务),无返回值supplyAsync():开启异步(创建线程执行任务),有返回值thenApply():然后应用,适用于有返回值的结果,拿着返回值再去处理。exceptionally......
  • CompletableFuture进阶
    CompletableFuture进阶1、异步任务的交互异步任务交互指将异步任务获取结果的速度相比较,按一定的规则(先到先用)进行下一步处理。1.1applyToEitherapplyToEither()把两个异步任务做比较,异步任务先到结果的,就对先到的结果进行下一步的操作。CompletableFuture<R>applyTo......
  • CompletableFuture入门
    CompletableFuture入门1、FuturevsCompletableFuture1.1准备工作先定义一个工具类importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.StringJoiner;importjava.util.concurrent.TimeUnit;publicclassCommonUtils{publicstaticStri......
  • CompletableFuture从入门到精通?算了,入个门就行了
    FuturevsCompletableFuture准备工作为了便于后续更好地调试和学习,我们需要定义一个工具类CommonUtils辅助我们对知识的理解。这个工具类总共四个方法readFile:读取指定路径的文件内容sleepMillis:休眠指定的毫秒数sleepSecond:休眠指定的秒数printThreadLog:打印携带线程信息......
  • Java | 一分钟掌握异步编程 | 5 - CompletableFuture异步
     作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我!前言继续讲,前面讲了Future实现异步,优点缺点也都有,这里讲使用CompletableFuture机制,目前为止,应该说JDK原生提供的异步方式的最优方案就是CompletableFuture了,已知的开源......
  • JUC并发编程基础篇第二章之CompletableFuture[加强版的线程]
    @目录1、创建线程的几种方式2、Future的优缺点3、CompletableFuture对Future的改进3.1、CompletableFuture的基本结构3.2、创建CompletableFuture四种方式3.3、CompletableFuture的流式调用3.4、CompletableFuture常见的用法1、创建线程的几种方式newthread://构造......
  • 记几次 [线上环境] Dubbo 线程池占满原因分析(第二次:CompletableFuture)
    转载:https://blog.csdn.net/wsmalltiger/article/details/124236189文章目录[线上环境]Dubbo线程池占满原因排查系列前言一、问题分析1、分析日志2、定位原因二、解决方案三、总结前言  某天早上9点左右收到线上故障报警,超过3个商家反馈“无法正常进入功能页面,点击相关操作提......
  • Java异步编程CompletableFuture
    Java通过多线程可以实现异步编程,下面是一个使用Java多线程实现异步编程的示例:publicclassAsyncDemo{publicstaticvoidmain(String[]args){Exec......
  • java中的CompletableFuture的实现异步操作的基本介绍
    在CompletableFuture类中,存在四种异步操作方法:第一种:publicstaticCompletableFuture<Void>runAsync(Runnablerunnable){returnasyncRunStage(ASYNC_POOL,......
  • CompletableFuture的使用
    1、开启子线程并获取子线程结果@Testpublicvoidtest1(){SmallTool.printTimeAndThread("媳妇进入餐厅");SmallTool.printTimeAndThread("......