CompletableFuture使用(一)

2023-10-27

CompletableFuture是java8提供的异步任务创建,回调,编排和异常处理.

创建异步任务

1. runAsync(Runnable runnable),创建一个没有返回值的异步任务,接受一个Runnable接口的实现类对象.

static CompletableFuture<Void> runAsync(Runnable runnable)
示例,异步读取指定文件
 public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newFixedThreadPool(5);
        CommonUtil.printThreadLog("start");
 		CompletableFuture.runAsync(() -> {
            CommonUtil.printThreadLog("读取文件");
            String news = CommonUtil.readFile("news.txt");
            CommonUtil.printThreadLog(news);
            CommonUtil.printThreadLog("读取文件结束");

        },executor);
        //关闭线程池
        executor.shutdown();
        CommonUtil.printThreadLog("end");

2. supplyAsync(Supplier supplier),创建一个有返回值的异步任务

static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
示例
ExecutorService executor = Executors.newFixedThreadPool(5);
        CommonUtil.printThreadLog("start");
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            CommonUtil.printThreadLog("读取文件");
            String news = CommonUtil.readFile("news.txt");
            CommonUtil.printThreadLog("读取文件结束");
            return news;
        },executor);

        CommonUtil.printThreadLog(future.get());
        //关闭线程池
        executor.shutdown();
        CommonUtil.printThreadLog("end");
示例中使用到的CommonUtil
public class CommonUtil {

    /**
     * 读取指定路径的文件
     * @param pathFile
     * @return
     */
    public static String readFile(String pathFile){
        try {
            pathFile = "D:\\study\\zlm_platform\\src\\main\\resources\\"+pathFile;
            return Files.readString(Paths.get(pathFile));
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 休眠指定毫秒数
     * @param millis
     */
    public static void sleepMillis(long millis){
        try {
            TimeUnit.MILLISECONDS.sleep(millis);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 休眠指定秒数
     * @param seconds
     */
    public static void sleepSecond(int seconds){
        try {
            TimeUnit.SECONDS.sleep(seconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    /**
     * 答应输出带线程信息的日志
     * @param message
     */
    public static void printThreadLog(String message){
        String result = new StringJoiner(" | ")
                .add(String.valueOf(System.currentTimeMillis()))
                .add(String.format("%2d",Thread.currentThread().getId()))
                .add(String.valueOf(Thread.currentThread().getName()))
                .add(message)
                .toString();
        System.out.println(result);
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CompletableFuture使用(一) 的相关文章

随机推荐

  • react 引入antd 样式_引用Ant.Design到React中

    参考地址 http ant design index cn ant design 首先说说ant design是干啥的 ant design是基于react开发的一个解放ui和前端的工具 它提供了一致的设计方便我们快速开发和减少不必要的设计
  • CocosCreator自动化绑定jsb

    与之前的cocos2dx js自定义js binding不同 这次用的是Cocos2dx里的自动绑定技术 更加的简单 高效 规整以及方便得多 而且之前的手动写文件不能适应更新后的CocosCreator版本的情况 环境配置 JDK NDK
  • 【H∞控制】H无穷控制器的matlab仿真

    1 软件版本 matlab2017b 2 系统概述 PID控制器 PID控制器 比例 积分 微分控制器 由比例单元 P 积分单元 I 和微分单元 D 组成 通过Kp Ki和Kd三个参数的设定 PID控制器主要适用于基本线性和动态特性不随时间
  • Java ffmpeg视频抽帧/转换遇到问题及解决

    Java 视频转换可能会遇到的问题及解决 很多报错都是没有引入 正确的依赖或者版本的问题 javacv版本及ffmpeg版本 1 正确的依赖
  • 狂神说Java--Docker(通俗易懂)

    目录 Docker的入门 Docker的概述 Docker的历史 Docker的用途 Docker的安装 Docker的基本组成 Docker安装 安装 阿里云镜像加速 登录阿里云找到容器服务 找到镜像加速器 配置使用 回顾HelloWor
  • html实现上下三角,css3实现三角形(上下左右)【转载】

    1 向上 kailong width 0 height 0 border right 50pxsolid transparent border left 50pxsolid transparent border bottom 50pxsol
  • Python实现进程管理

    Python实现进程管理 进程管理是操作系统中的重要组成部分 它负责创建 调度和终止进程 以及提供进程间通信和同步的机制 在Python中 我们可以使用多个库和模块来实现进程管理的功能 本文将介绍Python中几个常用的进程管理模块 并提供
  • pytorch打印模型参数

    目录 torchsummary打印 打印模型参数 两种方法结果好像是一样的 打印模型通道均值 获取按通道均值的排序top3索引
  • Sql Server 行转列

    SQL Server 行转列 聚合函数的选择 http www cnblogs com wlsandwho p 4423956 html 摘自网络 PIVOT用于将列值旋转为列名 即行转列 在SQL Server 2000可以用聚合函数配合
  • Token 刷新并发处理解决方案

    对 Token 进行刷新续期 我们要解决并发请求导致重复刷新 Token 的问题 这也是设计刷新 Token 的难点 这里我会分别介绍前端和后端各自的处理方案 后端方案 利用 Redis 缓存 当同时发起多个请求时 第一个接口刷新了 Tok
  • 【毕业设计】基于Spark的海量新闻文本聚类(新闻分类)

    文章目录 0 前言 1 项目介绍 2 实现流程 3 开发环境 4 java目录功能介绍 5 scala目录功能介绍 5 1 求TF IDF 5 2 调用K means模型 5 3 评价方式 6 聚类结果 7 最后 0 前言 Hi 大家好 这
  • undo表空间recover状态的(无备份)故障处理

    故障概述 今天项目上其他公司的运维人员找我说某数据库好像归档满了 并且他直接rman删了3天前的所有归档 然后发现二节点是宕机的 启动二节点数据库后发现2节点undo数据文件需要recover 这个数据库没有备份 万幸的是 需要recove
  • 浅谈压缩感知(二):理论基础

    主要内容 信号的稀疏表示 编码测量 采样过程 恢复算法 非线性 一 信号与图像的稀疏表示 在DSP 数字信号处理 中 有个很重要的概念 变换域 某个线性空间 一组基函数支撑起来的空间 一般而言 我们的信号都是在时域或空域中来表示 其实我们可
  • vcpkg下载不了报错

    使用powershell 添加环境变量 env HTTPS PROXY http 127 0 0 1 7890
  • 【闲谈】GPL3.0、Apache LICENSE 2.0 和 MIT LICENSE的区别

    昨天写了一下Git连接GitHub 这里涉及到了GitHub 而GitHub作为一个开源社区 又涉及到了许可证的问题 当然 国内目前大部分人还是不在乎这个的 因为在国内 这些东西有和没有 影响不大 主要就是这三大许可证GPL3 0 Apac
  • 图解通信原理与案例分析-27: 卫星通信系统及关键技术

    前言 本系列的前面文章 主要拆解的是通信网络设备部署在地面上的通信 包括有线通信与无线通信 从本章开始 通信网络的部署从地面扩展到太空 包括卫星通信 GPS定位 单向广播卫星通信 第六代移动通信6G 埃隆马斯克的星链计划 量子通信等 太空通
  • 频繁打开数据库连接是否影响性能的疑惑

    之前写了很多数据库开发方面的程序 有的时候需要连续操作数据库 就在想这么密集去操作数据库会不会大量消耗资源 因为垃圾回收机制并不是马上执行 于是 特意了解了一下情况 其实 数据库连接并不是托管资源 所以垃圾回收管不到它 另外Stream 文
  • Java实现PDF导出

    1 EasyPOI导出word 需求 使用easyPOI方式导出合同word文档 Word模板和Excel模板用法基本一致 支持的标签也是一致的 仅仅支持07版本的word也是只能生成后缀是docx的文档 poi对doc支持不好所以easy
  • mysql excel 同步数据_EXcel与MySQL之间的数据迁移

    1 将Excel中数据迁移到MySQL中 将Excel转化为CSV格式 记住保存的路径和文件名最好别出现中文 删除属性名 仅保留数据即可 之后用Sublime Text3打开 在file选项中有set file encoding to 选择
  • CompletableFuture使用(一)

    CompletableFuture是java8提供的异步任务创建 回调 编排和异常处理 创建异步任务 1 runAsync Runnable runnable 创建一个没有返回值的异步任务 接受一个Runnable接口的实现类对象 stat