多线程的批量线程同步解决方案

SpringBoot多线程一个事务 最近工作中遇到了一个问题 由于某个批量功能执行时间实在太慢 于是想着使用多线程的方法加速 但是运行了之后发现 他们不存在于一个事务中,想要一个报错 全体回滚暂时不明白该怎么实现 相关伪代码 @Transactional public void test() throws InterruptedException { CountDownLatch countDown... 阅读详情

  多线程运行时有待处理线程?试试看下面介绍的这个批量线程同步方法吧。

  在一批线程处理程序中,有时必须等到所有线程全部运行完后,才能进行下一步任务处理, 可以采用如下方法解决,创建一个锁对象 ,该锁对象提供一个当前线程等待其他线程的方法。见代码:


/**   
 *    
 * 此类主要用来处理线程的同步屏蔽模型,比如,一批线程运行,必须在最后一个线程运行   
 * 完后,才能进行下一步的操作,那么就可以创建一个锁对象,锁对象提供一个线程等待其他线程   
 * 的方法,如果当前线程运行时,还有未运行的线程,则此线程wait,否则,此线程唤醒其他阻塞的   
 * 线程,进而最终完成线程的运行   
 * */  
public class LockObject {   
 
 private int totalThread
 = 0;   
 private int currentThread = 0;   
 
 public LockObject(int totalThread) {   
  this.totalThread = totalThread;   
  this.currentThread = 1;   
 }   
 
 public synchronized void waitForOtherThread() {   
  if (this.currentThread < this.totalThread) {   
   this.currentThread++;   
   try {   
    this.wait();   
   } catch (InterruptedException e) {   
    // TODO Auto-generated catch block   
    e.printStackTrace();   
   }   
  } else {   
   this.currentThread = 1;   
   notifyAll();   
  }   
 }   
 
 public int getTotalThread() {   
  return totalThread;   
 }   
 
 public void setTotalThread(int totalThread) {   
  this.totalThread = totalThread;   
 }   
 
 public int getCurrentThread() {   
  return currentThread;   
 }   
 
 public void setCurrentThread(int currentThread) {   
  this.currentThread = currentThread;   
 }   
}

批量线程同步机制介绍

  此对象提供 二个私有变量,totalThread 的初始值为所运行的线程的总数,currentThread 为当前正在运行的线程数。

  线程运行时处理完自己的任务后调用方法waitForOtherThread 等待其他线程结束,即当前运行线程数与线程总数的比较

  如果运行线程数小于线程总数,则当前运行线程数+1 后,当前线程进入等待状态,否则,唤醒其他等待线程。

  见测试程序


public class MyThread extends Thread {   
 public static LockObject lo = new LockObject(1000);   
 
 public MyThread(String threadName) {   
  super(threadName);   
 }   
 
 public void run() {   
   System.out.println(Thread.currentThread().getName() + " ----开始运行");   
   lo.waitForOtherThread();   
   System.out.println(Thread.currentThread().getName() + " ----结束运行");   
 }   
 
 public static void main(String[] args) {   
  for (int i = 1; i <= 1000; i++) {   
   Thread thread = new MyThread("第" + i + "个线程");   
   thread.setPriority(NORM_PRIORITY);   
   thread.start();   
  }   
 }   
 
}  

   以上就介绍了批量线程同步的实现。

十七、SAP-采购订单(STO) 业务逻辑、功能讲解、图文解析、章节总结 阅读详情

相关推荐

帕塞瓦尔定理(Parseval‘s theorem)的证明

帕塞瓦尔定理(Parseval's theorem)表明了信号在时域和频域上的能量相等。

weixin_42428226的博客 2万+

Java多线程大批量同步数据(分页)

背景 最近遇到个功能,两个月有300w+的数据,之后还在累加,因一开始该数据就全部存储在mysql表,现需要展示在页面,还需要关联另一张表的数据,而且产品要求页面的查询条件多达20个条件,最终,这个功能卡的要死,基本查不出来数据。 最后是打算把这两张表的数据同时存储到MongoDB中去,以提高查询效率。 一开始同步的时候,采用单线程,循环以分页的模式去同步这两张表数据,结果是…一晚上,只同步了30...

宋发元 8092

告别OpenAI API调用:手把手在本地CPU/GPU上部署fast-whisper中文语音识别模型

本文详细指导如何在本地CPU/GPU上部署fast-whisper中文语音识别模型,摆脱对OpenAI API的依赖。从环境准备、模型获取与优化,到CPU/GPU环境的具体部署步骤和性能优化技巧,全面覆盖本地化语音识别的实现方案,帮助开发者提升效率并保障数据隐私。

weixin_29988907的博客 305

项目开发之Spring多线程事务如何一起提交一起回滚(附代码),并发处理批量数据,实现多线程事务回滚,事务补偿

目录 测试代码 结果: 封装的工具类: PS:测试已通过,部分数据操作,全部数据回滚,检查数据库无数据插入。 测试代码 @SpringBootTest @RunWith(SpringRunner.class) public class PlantTest { @Autowired private PlantService plantService; @Autowired private TransactionThreadPoolExecutor execut

Seven71111的博客 4801

使用 DeepSeek 配合 即梦AI 生成视频的详细教程

访问即梦AI官网,选择“AI作图”功能,将DeepSeek生成的提示词逐条粘贴至输入框,选择适配的模型(如“通用XL Pro”)和参数(如画幅比例、风格强度)1113。“我要制作一个关于普洱茶文化的宣传视频,请设计一个30秒的脚本,包含时间轴、画面描述、文案和分镜提示词,以表格形式输出。:云南古茶树群,清晨薄雾,金色晨光,露珠特写,国风山水画质感,16:9画幅,使用Nikon D850参数模拟513。:结合DeepSeek生成的知识点脚本与即梦AI的插画风格,制作科普动画211。

weixin_48995695的博客 3万+

STM32F407+LAN8720网口不通?别慌,手把手教你用CubeMX和LWIP搞定RMII以太网(附复位与PHY地址避坑指南)

本文详细解析了STM32F407与LAN8720通过RMII接口实现以太网通信的完整流程,重点解决了网口不通的常见问题。从硬件连接到CubeMX配置,再到LWIP网络参数设置,提供了复位时序、PHY地址配置等关键细节的避坑指南,帮助开发者快速排查和解决以太网通信故障。

weixin_33695082的博客 419

Java批量数据采用线程池分批同步处理

第一步:申明线程池 public ExecutorService taskExecutor = new ThreadPoolExecutor(6, Integer.MAX_VALUE, 0, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>()); 第二步:分批处理数据 // 每批次数量 Integer batchCount = 100;Integer start = 0; // 结尾 List list=new ArrayLis.

坐观垂钓者 2973

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 249

程序员首次入榜《最受欢迎的女友职业排行榜Top10》

点击“开发者技术前线”,选择“星标????”在看|星标|留言, 真爱作者丨WYN来源丨我要WhatYouNeed(newWhatYouNeed)前线推出学习交流群,加群一定要备注:研究...

开发者技术前线-DevolperFront 273

聊聊蓝牙配对技术-CTKD OVER BR/EDR

摘要:本文探讨了蓝牙设备通过跨传输密钥派生(CTKD)机制实现双模连接的技术细节。研究发现,手机在连接双模耳机时优先通过BR/EDR配对,再利用CTKD派生BLE连接所需的密钥。关键条件包括:设备地址一致性、启用安全连接(Secure Connection)及禁用justworks配对方式。文章详细剖析了从BR/EDR链路密钥派生BLE长期密钥(LTK)的算法流程,重点解析了H6/H7加密函数的作用机制与安全差异。研究还通过HCI日志验证了密钥交换和加密建立的完整过程,指出蓝牙5.1版本对CTKD安全性的强

十多年蓝牙协议软件开发,擅长蓝牙协议分析 2691

微波技术仿真:微波谐振器分析_(2).微波谐振器理论

谐振器是一种能够在特定频率范围内存储和释放电磁能量的器件。在微波频段,谐振器通常用于滤波、频率选择和能量存储等应用。一个理想的谐振器在谐振频率下能够存储无限大的能量,但在实际应用中,由于损耗的存在,谐振器的性能会受到一定限制。微波谐振器在微波通信、雷达系统、微波测量和微波电路设计等领域中发挥着重要作用。谐振器的设计需要考虑多个因素,包括谐振频率的精确控制、损耗的最小化、频率稳定性的提高和小型化设计。通过理论分析和仿真工具的使用,可以有效优化谐振器的性能,满足实际应用的需求。

2401_87715305的博客 932

多线程数据同步

在多线程同步的时候,把数据从一个表同步到另外一个表,这个时候考虑多久同步一次,还要考虑多同步的性能问题,在这里由于同步的数据比较复杂,这里没隔5分钟同步500条数据代码如下: 住线程的代码,根据最后的时间来同步,把时间存放在redis里面 protected Log log = new Log(this.getClass()); private static final String C...

alex_mmg的博客 1637

文末含资料链接和视频讲解!YOLOv8集成CoordAtt注意力机制详细教程

本文详细介绍了如何在YOLOv8目标检测框架中集成CoordAtt注意力机制。首先解析了CoordAtt的工作原理,它通过分解式池化将位置信息嵌入到通道注意力中,相比传统注意力机制具有更好的空间信息保持能力。然后提供了PyTorch实现代码解析,包括自适应平均池化、Hard-Swish激活函数等关键实现细节。最后概述了YOLOv8架构,为后续集成CoordAtt提供基础。该教程适合具备深度学习基础的开发者,将理论与实践结合,帮助读者掌握这一目标检测优化技术。

FJN110的博客 266

Laravel 命令行工具之多线程同步大批量数据 DB连接混乱 解决方案

Laravel 命令行工具之多线程同步大批量数据 DB连接混乱 解决方案

10年职场两茫茫,35岁凄凉奈若何 217

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

哔咔漫画多线程下载解决方案

对于漫画爱好者而言,网络波动导致阅读中断、手动保存效率低下、收藏管理混乱等问题长期存在。picacomic-downloader作为一款开源漫画下载工具,通过多线程下载技术、智能收藏同步和本地化管理功能,为用户提供高效稳定的漫画收藏体验,彻底解决漫画阅读与管理的核心痛点。 ## 剖析漫画收藏的核心痛点 漫画爱好者在日常使用中常面临三大困境:网络依赖性强导致阅读体验不稳定,尤其在弱网环境下频繁加

gitblog_00836的博客 2443

jre9下载 jdk9

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

Java多线程Jdbc_[Java123] JDBC and Multi-Threading 多线程编程学习笔记

项目实际需求:DB交互使用多线程实现多线程编程基础:1.5 :( (假设总分10)计划一个半月从头学习梳理Java多线程编程基础以及Oracle数据库交互相关的多线程实现学习如何通过代码去验证这些结论Some TipsMulti-threading will improve your performance but there are a couple of things you need to...

weixin_39734184的博客 387

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Thread】并行多线程任务的创建

对于简单的并行任务,可以通过线程池+Future的方案来 解决;如果任务之间有聚合关系,无论是 AND 聚合还是 OR 聚合,都可以通过CompletableFuture来解决;而批量的并行任务,则可以通过CompletionService来解决 1. 线程池 + Future public class ExampleTwo { public static void main(String[] args) throws Exception { System.out.println(

sco5282的博客 544

KKManager项目中的文件批量下载解决方案

在管理IllusionMods/KKManager项目的过程中,开发者经常会遇到需要批量下载资源文件的需求。本文介绍了一种基于Python的自动化下载方案,能够高效地从指定网站抓取并下载所有.zipmod格式的模组文件。 ## 技术实现原理 该解决方案采用Python语言编写,主要利用了以下几个关键技术组件: 1. **requests库**:负责处理HTTP请求,获取网页内容和文件下载 2

gitblog_07544的博客 627

Java高性能并发编程实战解锁多线程场景下的性能优化与同步机制新思维

以下是关于Java高性能并发编程在多线程场景下性能优化与同步机制的原创文章内容,按照您指定的格式展开:---

WDZjTQRa的博客 663

Linux C多线程编程入门与主线程等待技巧

深入讲解Linux下C语言多线程编程基础,涵盖线程创建、等待、分离、互斥锁、信号量和条件变量等核心机制,重点解析主线程如何通过pthread_join等待子线程结束,避免资源泄漏。

weixin_29009401的博客 1082

多线程下任务状态异常的问题解决

当方法上标注了@Transactional注解时,整个方法体内的所有数据库操作都会在一个统一的事务范围内进行。这意味着事务会在方法执行开始时开启,并在方法正常完成时提交,或者在方法中抛出未被捕获的异常时回滚。

weixin_45809780的博客 1124

流媒体服务器strm文件自动化管理终极方案:零配置实现批量创建与智能同步

在家庭媒体中心建设中,如何高效管理海量媒体文件并实现与流媒体服务器的无缝对接,一直是困扰众多用户的痛点问题。传统的挂载方式不仅占用系统资源,手动创建strm文件更是耗时耗力。本文将深度解析一种革命性的解决方案,让您彻底告别繁琐操作。 ## 核心价值:重新定义strm文件管理体验 ### 传统方案痛点分析 - **手动创建效率低下**:面对数千个媒体文件,逐个创建strm文件几乎不可能 - **

gitblog_00413的博客 1127

微博图片批量下载终极指南:免登录快速获取完整教程

还在为一张张手动保存微博图片而烦恼吗?微博图片批量下载工具能够让你轻松实现免登录快速获取用户相册内容,告别繁琐的重复操作,享受高效的下载体验。 ## 🎯 一键配置步骤:环境准备与安装 ### 依赖安装 首先安装必要的Python依赖包: ```bash pip install requests colorama ``` ### 获取项目代码 ```bash git clone htt

gitblog_01053的博客 995

智能抖音批量下载解决方案:专业级内容管理与数据分析实践

在数字内容创作与运营领域,抖音平台已成为重要的内容分发渠道。然而,传统的手动下载方式在面对批量内容收集、竞品分析、数据研究等专业需求时显得力不从心。本文将通过实际应用场景深度解析智能抖音批量下载工具的核心价值与实施策略。 ## 行业应用场景深度剖析 ### 内容创作者的专业素材管理 数字媒体创作者面临的核心挑战是建立系统化的素材库。通过智能下载工具,创作者能够实现作品全生命周期管理,从发布到归

gitblog_00075的博客 630

告别重复操作,文件管理神器在线将某个文件夹中的所有文件批量复制到多个目录中,轻松成为办公软件达人

导入已复制的文件,选择适合的重命名规则(如自定义、替换、插入、翻译等),设置新的文件名格式,预览并确认重命名规则无误后,点击“开始改名”按钮,软件将批量重命名已复制的文件。2.‌添加要复制的文件夹‌:点击“添加文件夹”选项,在弹出的文件框中选择需要复制的文件夹,将其导入到软件中。1.‌打开软件并定位功能‌:启动“文件批量改名高手”软件,进入软件主界面,找到并点击“文件智能管理箱”下的“文件批量复制工具”功能板块。5.‌执行复制操作‌:确认所有设置无误后,点击“开始复制”按钮,软件将自动开始批量复制过程。

baba863133829的博客 362
上一篇: 预赛试题A卷 Java程序设计
下一篇: 线程局部变量的使用与多线程开发
J2EE_dev
博客等级 码龄18年 237粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值