多线程最佳实践

异步线程阻塞等待完成

当你遇到一个场景,需要同时启动多个任务,并等待所有任务完成后执行后续操作。这个方法很有用,比如你需要执行三个下载任务,当三个任务都下载完成后你才通知界面说完成,这个时候如果一个个去下载肯定耗时非常高,我们可以同时起三个线程去并行执行任务,减少总的执行时间。

下面是一段例子代码:

// 模拟N个下载任务列表
ArrayList<Object> downloadTaskList = new ArrayList<>();
List<CompletableFuture<Void>> futureList = downloadTaskList.stream().map(downloadParam -> CompletableFuture.runAsync(() -> {// 下载任务downloadTask(downloadParam);})).collect(Collectors.toList());// 等待所有异步任务完成CompletableFuture<Void> allOf = CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0]));// 阻塞等待所有结果allOf.join();//执行其他操作

2个异步线程执行完后阻塞

		// 创建第一个异步任务CompletableFuture<String> future1 = CompletableFuture.runAsync(() -> {try {System.out.println("Task 1 is running");Thread.sleep(2000); // 模拟任务执行return "Task 1 is completed";} catch (InterruptedException e) {e.printStackTrace();}});// 创建第二个异步任务CompletableFuture<String> future2 = CompletableFuture.runAsync(() -> {try {System.out.println("Task 2 is running");Thread.sleep(3000); // 模拟任务执行return "Task 2 is completed";} catch (InterruptedException e) {e.printStackTrace();}});// 创建一个CompletableFuture,等待两个异步任务都完成CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2);allTasks.thenRun(() -> {try {// 获取任务结果String result1 = future1.get();String result2 = future2.get();// 在此进行后续操作} catch (Exception e) {log.error("任务执行异常", e);}}).join();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/22616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis01-初识Mybatis

简介 1、 什么是Mybatis MyBatis 是一款优秀的持久层框架; 它支持自定义 SQL、存储过程以及高级映射 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Ol…

try…except语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在程序开发时&#xff0c;有些错误并不是每次运行都会出现。例如&#xff0c;实例01&#xff0c;只要输入的数据符合程序的要求&#xff0c;程序就可…

推荐一个免费的相亲工具

推荐一个免费的相亲工具&#xff0c;步骤如下&#xff1a; 1&#xff09;微信里面搜索公众号“光源桥”&#xff0c;并关注 2&#xff09;输入搜索条件进行搜索对象 例如下面搜索&#xff1a;

【通信协议-RTCM】RTCM通信协议常用英文缩写词汇对照表

RTCM通信协议常用英文缩写词汇对照表 ARP ---- Antenna Reference Point 天线参考点BDS ---- BeiDou Navigation Satellite System 北斗卫星导航系统CRS ---- Coordinate Reference System 坐标参考系ECEF ---- Earth Centered Earth Fixed 地心地固坐标系GLONASS ---- Global…

CDH服务红,查看日志发现host有问题

看host后&#xff0c;发现里面节点ip都是127.0.0.1然后全部改成对应的ip&#xff0c; 1.在/etc/hosts里面全部加上了 ip以及对应的角色名称 2然后注释了127.0.0.1 hostname 3.然后重启所有的机器agent和server&#xff0c;在重新登录&#xff0c;点击重新部署。 重启agent sy…

电子凭证3.0,助力企业实现报销自动化

在数字化浪潮汹涌澎湃的今天&#xff0c;企业对于高效、便捷、安全的财务管理需求日益凸显。传统的报销流程繁琐、耗时&#xff0c;不仅增加了企业的运营成本&#xff0c;还影响了员工的工作效率和满意度。用友BIP电子凭证3.0的发布&#xff0c;无疑为企业实现报销自动化提供了…

链桨PaddleDTX-基于区块链的联邦学习

目录 链桨PaddleDTX-基于区块链的联邦学习 一、项目简介 1.1 多方安全计算网络

Linux:共享内存介绍(进程间通信)

共享内存 共享内存原理介绍共享内存系统调用接口shmget 创建共享内存段ftok 生成唯一键 key开始创建共享内存指令 ipcs -m 查看共享内存指令 ipcrm -m 删除共享内存段shmctl 控制创建的共享内存通过系统调用来删除共享内存 共享内存权限问题关联/去关联共享内存封装处理 共享内…

数据采集项目结案报告

常州嘉爵机械机床采集项目案例 项目背景 常州市嘉爵机械配件厂 响应国家政策&#xff0c;申报智能车间&#xff0c;优化管理 车间设备包括&#xff1a;发那科机床、三菱机床。 项目需求调研分析 采集设备工艺参数&#xff0c;计算设备稼动率。 车间设备情况&#xff1a; …

Facebook开户 | 创建有效的Facebook广告文案策略

想要在Facebook上取得成功&#xff0c;不仅仅是投放广告&#xff0c;同时也需要优化广告创意以及文案。 1、标题具有吸引力 标题可以写有很大利益或者各种优惠类型的&#xff0c;只要标题具有吸引力&#xff0c;并且可以准确的向用户传达产品以及服务的优势等&#xff0c; 2…

HarmonyOS应用开发深度指南:从基础到高级实践

1. HarmonyOS开发概述 HarmonyOS是华为推出的分布式操作系统,旨在为不同设备提供统一的体验。它支持多种编程语言,包括ArkTS、JS、C/C++和Java。开发者需要了解HarmonyOS的分布式架构,包括Ability、Service、Data Ability等核心概念。 了解HarmonyOS的分布式架构:HarmonyO…

人工智能:人类的自我革命,你还停留在焦虑吗?

在这个信息爆炸、科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;不再是一个遥不可及的科幻概念&#xff0c;而是正逐步融入我们的日常生活&#xff0c;引领着一场人类的自我革命。然而&#xff0c;面对这一变革&#xff0c;许多人不禁陷入焦虑与担忧之中。…

解析Bert系列模型的输出结果?结构与形状是什么?如何更好地应用到‘微调下游任务’中?

无论是工作还是上学&#xff0c;使用Bert、RoBERTa或者Bert系列模型作为基底&#xff0c;在此基础之上构建神经网络分支进行微调&#xff0c;是非常简单、常见的一种任务实现方式。既然是基于别人的工作进行展开&#xff0c;那就有必要了解Bert系列模型的输出结果和结构。&…

【数据采集】实验07-Kafka的常用命令及使用

文章目录 一、实验目的二、实验准备三、实验内容1. 运行Zookeeper2. 运行kafka3. 创建topics4. Kafka与MySQL的组合使用&#xff0c;把JSON格式数据放入Kafka发送出去&#xff0c;再从Kafka中获取并写入到MySQL数据库&#xff0c;p975. Kafka与MySQL的组合使用&#xff0c;把My…

在视频号上面怎么卖货?只需要开一个店铺即可!具体怎么操作?

大家好&#xff0c;我是电商小V 最近这段时间在视频号上面卖货的热度可以说是非常大的&#xff0c;也是创业者常常提起的话题&#xff0c;大家之所以对视频号卖货非常感兴趣那是因为视频号和抖音处于一个赛道&#xff0c;也是朝着电商的方向发展&#xff0c; 所以说大家对于腾讯…

mongo篇---mongoDB Compass连接数据库

mongo篇—mongoDB Compass连接数据库 mongoDB笔记 – 第一条 一、mongoDB Compass连接远程数据库&#xff0c;配置URL。 URL: mongodb://username:passwordhost:port点击connect即可。 注意&#xff1a;host最好使用名称&#xff0c;防止出错连接超时。

cmake使用(01)

顶层CMakeLists.txt cmake_minimum_required (VERSION 3.5)# 配置 交叉编译 放置在 project() 命令之前# /opt/fslc-wayland/2.5.2/sysroots/aarch64-fslc-linux/usr/bin/make: error # while loading shared libraries: libdl.so.2: cannot open shared object file: # No su…

c++ 模板类的泛化版本,只声明,不定义,可以么?可以

王建伟老师的课本&#xff0c;413 页讲解过这个情况。只要不创建泛化模板的对象即可。最近看源码时&#xff0c;也出现了这种情况&#xff0c;大师们也这么写。故简化逻辑&#xff0c;测试一下&#xff1a; 谢谢

家庭海外仓系统:做好标准化管理,小空间也能做出高收益

家庭海外仓凭借其运营模式灵活&#xff0c;合作成本低的独有特点&#xff0c;还是被很多跨境卖家所接受的。不过家庭海外仓的盈利也面临着一些问题。 首先&#xff0c;家庭海外仓的仓储空间有限&#xff0c;很难通过规模效应放大收益。家庭海外仓通常只能存储少量货物&#xf…

个人参与场外期权交易的最全指南

个人参与场外期权交易的最全指南 一、引言 场外期权作为金融市场中的一大亮点&#xff0c;为个人投资者提供了多样化的风险管理及投资策略选择。本文将详细探讨个人如何安全、有效地参与场外期权交易。 文章来源/&#xff1a;财智财经 二、理解场外期权 场外期权是双方通过协…