ExecuteService--ThreadPoolExecutor线程池搭配CountDownLatch优化循环请求外部接口效率

Ubuntu20.04安装Eigen3.3.7、模板类Sophus和Ceres Sophus的使用必须依赖3.3以上的Eigen版本。如果版本太低,Sophus库将无法安装使用。 阅读详情

初始化线程池ExecuteService

构造线程池的方法有多种,可根据使用场景自由选择。

//固定了线程池中的线程。
ExecutorService threadPool = Executors.newFixedThreadPool(5);
//缓存型池子,动态的增加减少线程
ExecutorService threadPool = Executors.newCachedThreadPool();
//单一线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
//调度型线程池
ExecutorService threadPool = Executors.newScheduledThreadPool(3);

本文采用如下方法,构建ExecuteService线程池,线程数根据cpu核心数进行设置。

//线程自增编号
private AtomicInteger atomicInteger = new AtomicInteger();

//最大及核心线程数,cpu核心数2倍
private Integer threadCount = 16;

//线程池构造方法
private ExecutorService executorService = 
new ThreadPoolExecutor(
    threadCount,
    threadCount,
    300L, 
    TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(),r -> {
        int index = atomicInteger.incrementAndGet();
        log.info("create no " + index + " thread");
        return new Thread(r, "Thread-" + index);
    });

分配任务到线程

使用CountDownLatch等待任务线程执行完毕后,执行日志录入等任务的线程。

//分多线程发送
List<List<Map<String, String>>> partition = Lists.partition(mapList, threadCount - 1);
//同步倒记锁
CountDownLatch countDownLatch = new CountDownLatch(partition.size());
partition.forEach(current -> executorService.execute(() -> {
    current.forEach(entry -> {
        //具体待处理的任务
    });
    //计数器减一
    countDownLatch.countDown();
}));

//等待任务线程执行完毕后,执行此线程
executorService.execute(() -> {
    log.info("等待任务完成");
    try {
    //计数器减为0时,此线程执行
    countDownLatch.await();
    } catch (InterruptedException e) {
       e.printStackTrace();
    log.error("同步等待任务异常");
    }
    log.info("任务已经完成");
});

 

ORB-SLAM3代码详解 - 第 18 篇 · Atlas 多地图系统、地图保存与全系统调优 会跑:理解三线程架构与数据流(01/08/10/13),能编译、配参、复现各数据集结果。会改:掌握相机模型抽象(05)、g2o 顶点与边(14)、预积分(15),能接入新传感器、新相机、新约束。会调:理解每个参数背后的物理含义与耦合(03/15/16/18),能针对自己的平台与场景做精度/实时/鲁棒的权衡。ORB-SLAM3 的价值不止于一个可用的 SLAM 系统,更在于它是一套工程化的几何状态估计模板:清晰的模块边界、可替换的相机/传感器抽象、紧耦合优化的标准范式。 阅读详情

相关推荐

深度学习、图像分类入门,从VGG16卷积神经网络开始

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路: 一、我认为学习卷积神经网络必须知道的几个概念: 1、卷积过程:   我们经常说卷积神经网络卷积神经网络,到底什么才是卷积?网络层卷积过程到底怎么实现?我们在这里借鉴了另一位博客大牛的动态图来给大

Errors_In_Life的博客 16万+

Java/ExecutorService中多线程服务ExecuteService的使用

ExecutorService 是 Java 中的一个接口,它扩展了 Executor 接口,并提供了更多的方法来处理多线程任务。它是 Java 中用于执行多线程任务的框架之一,可以创建一个线程池,将多个任务提交到线程池中执行。ExecutorService 接口提供了许多方法,如 shutdown()、shutdownNow()、submit()、execute()、invokeAll() 等,可以更方便地提交任务、执行任务、关闭线程池等操作。

★【World Of Moshow 郑锴】★ 4458

[后端设计]innovus命令editPin详解?

先放命令,有空慢慢写。

m0_61003348的博客 5736

线程池中Executor、ExecuteService、Executors 的区别

Executor、ExecuteService都是接口,ExecuteService继承了Executor, Executor:接口 接口Executor里面只有一个execute方法:  void execute(Runnable command) ExecutorService:接口 接口ExecutorService继承了Executor public interface

阳光温热,岁月静好,你还不来,我怎敢老去…… 6168

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

【NLG】(六)文本生成评价指标—— ROUGE原理及代码示例

前奏: 【NLG】(一)文本生成评价指标——BLEU原理及代码示例 【NLG】(二)文本生成评价指标—— METEOR原理及代码示例 【NLG】(三)文本生成评价指标—— ENTROPY原理及代码示例 【NLG】(四)文本生成评价指标—— diversity原理及代码示例 【NLG】(五)文本生成评价指标—— kl_divergence原理及代码示例 1.ROUGE原理 2.优缺点 3.如何算ROUGE ...

凝眸伏笔的博客 1万+

Java线程池ThreadPoolExecutor详解和CountDownLatch的使用

多线程

进击的豌豆的博客 2702

Dify+工作流,通过多模态实现发票自动识别

上个章节我们用Dify实现了基于本地知识库的聊天助手,本节我们通过工作流 ,可视化界面快速构建复杂的工作流和自动化流程。结合 OCR(光学字符识别)技术和工作流引擎,可以实现发票的自动识别、数据提取以及后续的审批流程。本文将详细介绍如何使用 Dify 和工作流来实现发票的自动识别与审批。

odin2005的博客 7426

线程池 ExecuteService 启动后,应该关闭

当使用 ExecutorService 启动多线程完毕之后,应该关闭它,这样才能保证线程不会继续保持运行状态。 举例来说,如果程序通过 main() 方法启动,并且主线程退出了程序,如果还有一个活动的 ExecutorService 存在于程序中,那么程序将会继续保持运行状态。 启动状态的 ExecutorService 会阻止 Java 虚拟机关闭。 为了关闭 ExecutorServic...

tfish的专栏 2992

黑猫带你学Nand第11篇:万字长文带你了解NandFlash的数据保持原理及特性(Data Retention)

TATTAT:Trap-assistedtunneling,陷阱辅助隧穿,也有叫法称为电荷陷阱现象。这是一种物理现象,它发生在非挥发性存储器,如NAND闪存。在这种效应中,存储在闪存单元浮动栅极上的电荷(电子)由于隧道氧化物中捕获的电荷形成的电场影响,导致电荷通过隧道效应从一个能级隧穿到另一个能级,从而造成电荷泄漏。这种电荷泄漏是导致闪存数据保持问题的主要原因之一,因为它可以改变存储在闪存单元中的电荷量,进而改变其阈值电压水平,最终可能导致数据错误。在NANDFlash中,电荷被存储在浮置栅极上。

黑猫奥利奥的博客 1103

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

【Java线程】ThreadPoolExecutor和CountDownLatch: 多线程并发处理任务, 并获取线程处理结果

借助ThreadPoolExecutor和CountDownLatch高效率处理多个任务。略。

qq_43783527的博客 1750

【大模型工程局】告别单打独斗:手把手带你构建多智能体系统(MetaGPT 启示录)

想象一下,不再是只有一个全知全能的 AI,而是有一群各有所长、能够独立思考和行动的“智能体”(Agent)。它们生活在一个共同的环境中,可以相互交流、协作完成共同目标,也可能为了有限资源而相互竞争。这就是多智能体系统(MAS)的核心图景。MAS 的关键特征:自治性 (Autonomy):每个智能体都能独立感知环境、做出决策并执行动作,无需外部直接控制。交互性 (Interaction):智能体之间可以通过某种通信机制(显式或隐式)交换信息、协调行为。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1186

ExecuteService学习

private static void executeRunnableTask() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(2); IntStream.range(0, 10).boxed().forEach(i->...

learnerq的博客 1434

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ThreadPoolExecutor线程池,CountDownLatch计数器

需求:只有多线程执行各个类的方法,执行完成后,再继续执行主线程下面的程序 1、创建父类 package com.cgx; /** * 动物父类 */ public interface Animal { void run(); void call(); } 2、创建子类 package com.cgx.impl; import com.cgx.Animal; public class Dog implements Animal { @Override ..

chenguixu的博客 810

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

线程池ExecuteService使用总结一

三个区别: 1、接收的参数不一样 2、submit有返回值,而execute没有 Method submit extends base method Executor.execute by creating and returning a Future that can be used to cancel execution and/or wait for completion.  用到...

wangtf6的博客 3248

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ThreadPoolExecutor+CountDownLatch的用法

1 ThreadPoolExecutor 创建参数 corePoolSize 核心线程数量, 可以设置allowCoreThreadTimeOut 关闭线程 maximumPoolSize 设置线程池中允许线程数量的最大值 KeepAliveTime 当前线程池中超过核心线程数并且处于空闲时,线程池统一让出系统资源 TimeUnit 用于KeepAliveTime的时间单位 workQueue 阻塞队列,用于存放以提交至线程池但未被执行的任务 ThreadFactory 自定义线程工厂创建线程

weixin_41550124的博客 859

ExecutorService线程池

ExecutorService的submit和execute ExecuteService代表的是Executors创建的线程池①submit提交的是实现了Callable接口的方法,有返回值(返回Future,执行future.get()方法即可获取具体返回值)②execute执行的是实现了Runnable接口的方法,没有返回值所以线程池对象executorService选择使用submit和...

HD243608836的博客 893

CountDownLatch导致的线程阻塞问题及线程池的使用

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

会中流击水的博客 5367

线程池ThreadPoolExecutor详解(整理详细)

线程池ThreadPoolExecutor详解(整理详细)

yuechuzhixing的博客 3万+

多线程 ExecutorService CountDownLatch使用

一 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。...

sinat_34338162的博客 2175

JAVA 等待并发任务结束的几种方式

有时间需要并发执行一系列任务,等待所有的任务结束后再进行一些操作,下面介绍几种实现方式。 假设任务为: Runnable r = () -> { try { Thread.sleep(new Random().nextInt(1000)); } catch (InterruptedException e) { e.printStackTrace();

jackpaul 的博客 3422

java并发-线程池ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别?

文章目录一、ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别二、ThreadPoolTaskExecutor 线程池等待所有任务完成的几种方式方式1【推荐】: 使用 CountDownLatch方式2: 使用 Future方式3: setWaitForTasksToCompleteOnShutdown(true)三、参考 一、ThreadPoolTaskExecutor和ThreadPoolExecutor有何区别 ThreadPoolTaskExecutor是sp

西京刀客 8918

Java多线程ThreadPoolTaskExecutor、CountDownLatch并发下载文件并打包zip

多线程并发下载文件 1.启用多线程下载,线程交给线程池调度, 2.在线程里文件写入zip 写入是加锁 3.使用CountDownLatch保证子线程写入文件结束后主线程在返回 zip打包使用的是org.apache.commons:commons-compress:1.18 gradle:compile group: 'org.apache.commons', name: 'commons-compress', version: '1.18' maven: <!-- htt...

mutouren891114的博客 1898

CountDownLatch用法详解

CountDownLatch用法详解 CountDownLatch使用场景 线程计数器 用于线程执行任务,计数 等待线程结束 用法一: 等待所有的事情都做完 //程序计数器 CountDownLatch countDownLatch = new CountDownLatch(2); //2个线程 ExecutorService executorService = Executors.newFixedThreadPool(2);

. 3万+

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

一恍过去 1万+
上一篇: 如何在购买笔记本电脑的时候选择配置?这篇笔记本电脑的配置参数解析你值得拥有。
下一篇: SpringBoot、SpringCloud、nacos版本对应关系
A__cup__of__Java
博客等级 码龄9年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值