当前位置: 首页 > article >正文

【CompletableFuture实战】

CompletableFuture实战

  • 前言

前言

过去的一年,匆匆忙忙,换了一次工作,写博客的习惯就落下了,总之,有点懈怠。希望今年能重拾信心,步入正规!

CompletableFuture的用法网上资料颇多,我这里就简单记录下自己项目中的真实场景(代码模拟思路),算是抛砖引玉~

    public void handleUserList(List<Users> userList) {
        // 增加自定义线程池
        ExecutorService executorService = new ThreadPoolExecutor(2, 2, 0, TimeUnit.SECONDS, new LinkedBlockingDeque<>(12));
        List<Users> itDeptList = userList.stream().filter(name -> name.getDeptName().equals("IT")).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(itDeptList)) {
            return;
        }
        CompletableFuture<Void> createFuture = CompletableFuture.runAsync(() -> {
            // 模拟某线程执行业务,比如创建用户
            usersMapper.insert(itDeptList.get(0));
        }, executorService);

        CompletableFuture<Void> updateFuture = CompletableFuture.runAsync(() -> {
            List<Integer> userIds = itDeptList.stream().map(Users::getUserId).collect(Collectors.toList());
            // 模拟某线程执行业务,比如根据ID列表查询用户
            usersMapper.selectBatchIds(userIds);
        }, executorService);

        // 等待两个线程执行完毕,最后执行主线程
        CompletableFuture.allOf(createFuture, updateFuture).join();
    }

http://www.kler.cn/a/508640.html

相关文章:

  • NodeJS | 搭建本地/公网服务器 live-server 的使用与安装
  • js基础---var与let的区别以及const的使用
  • vue 学习笔记 - 创建第一个项目 idea
  • 高级编程语言的基本语法在CPU的眼中是什么样的呢?
  • 电脑风扇声音大怎么办? 原因及解决方法
  • 128.最长连续序列
  • Git 安装 操作 命令 远程仓库 多人协作
  • Zotero 插件Better Notes导入新的笔记模板
  • RV1126+FFMPEG推流项目(6)视频码率及其码率控制方式
  • 【区间DP】力扣3040. 相同分数的最大操作数目 II
  • 被动扫描和主动扫描的区别
  • OSPF(1):基础知识与数据包、状态机、工作过程
  • springboot项目架构
  • 【开源免费】基于Vue和SpringBoot的夕阳红公寓管理系统(附论文)
  • 在VMwareFusion中使用Ubuntu
  • RabbitMQ--发送方确认及消息重试
  • 数仓建模(三)建模三步走:需求分析、模型设计与数据加载
  • (二)异步处理机制(Asynchronous Processing)
  • Spring Boot 中logback无法对warn警告日志发送邮件
  • 使用SIPP发起媒体流性能测试详解
  • PyBroker:利用 Python 和机器学习助力算法交易
  • 自动驾驶占用网格预测
  • Ruby JSON 优化之路:性能提升的探索与实践
  • 文档智能:OCR+Rocketqa+layoutxlm <Rocketqa>
  • 【Kotlin】上手学习之控制流程篇
  • ReaderLM v2:HTML 转 Markdown 和 JSON 的前沿小型语言模型