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使用(一) 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 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