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

CountDownLatch 批量更改使用,

代码

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.first.pet.platform.entity.PlatformAddress;
import com.first.pet.platform.mapper.PlatformAddressMapper;
import com.first.pet.platform.service.IPlatformAddressServiceTest;
import com.first.pet.threadPool.ThreadPoolUtils;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.CountDownLatch;/*** <p>* 服务类* </p>** @author yangquan* @since 2023-09-26*/
@Service
public class IPlatformAddressServiceTestImpl extends ServiceImpl<PlatformAddressMapper, PlatformAddress> implements IPlatformAddressServiceTest {@Resourceprivate PlatformAddressMapper platformAddressMapper;//每次查询500条数据操作/*** 组装数据*/@Override@Transactional(rollbackFor = Exception.class)public void assembleAddressData() throws InterruptedException {//        1.创建任务计数器  参数为设置任务数量//开三个线程,一个线程执行500条CountDownLatch countDownLatch = new CountDownLatch(4);//        2.开启三个线程  分别执行三个查询//        查询 性别信息ThreadPoolUtils.sqlThreadPool.submit(new Runnable() {@Overridepublic void run() {QueryWrapper<PlatformAddress> addressWrapper = new QueryWrapper<>();addressWrapper.last("limit 1500,500");List<PlatformAddress> platformAddresses = platformAddressMapper.selectList(addressWrapper);List<PlatformAddress> platformAddress = getPlatformAddress(platformAddresses);platformAddressMapper.updateDataById(platformAddress);//                得到查询结果//                计数器减一countDownLatch.countDown();}});//        查询 地区分布ThreadPoolUtils.sqlThreadPool.submit(new Runnable() {@Overridepublic void run() {QueryWrapper<PlatformAddress> addressWrapper = new QueryWrapper<>();addressWrapper.last("limit 2000,500");List<PlatformAddress> platformAddresses = platformAddressMapper.selectList(addressWrapper);List<PlatformAddress> platformAddress = getPlatformAddress(platformAddresses);platformAddressMapper.updateDataById(platformAddress);//                得到查询结果//                计数器减一countDownLatch.countDown();}});//        查询 注册量ThreadPoolUtils.sqlThreadPool.submit(new Runnable() {@Overridepublic void run() {QueryWrapper<PlatformAddress> addressWrapper = new QueryWrapper<>();addressWrapper.last("limit 2500,500");List<PlatformAddress> platformAddresses = platformAddressMapper.selectList(addressWrapper);List<PlatformAddress> platformAddress = getPlatformAddress(platformAddresses);platformAddressMapper.updateDataById(platformAddress);//                得到查询结果//                计数器减一countDownLatch.countDown();}});//        查询 注册量ThreadPoolUtils.sqlThreadPool.submit(new Runnable() {@Overridepublic void run() {QueryWrapper<PlatformAddress> addressWrapper = new QueryWrapper<>();addressWrapper.last("limit 3000,500");List<PlatformAddress> platformAddresses = platformAddressMapper.selectList(addressWrapper);List<PlatformAddress> platformAddress = getPlatformAddress(platformAddresses);platformAddressMapper.updateDataById(platformAddress);//                得到查询结果//                计数器减一countDownLatch.countDown();}});//        await() 当计数器为0的时候 主线程向下执行 没有这一步的话,如果一旦主线程向下执行// return map map中可能有的开启的线程还没有执行完毕,即返回的不是线程执行后的结果countDownLatch.await();}private List<PlatformAddress> getPlatformAddress(List<PlatformAddress> platformAddresses) {platformAddresses.stream().forEach(e -> {e.setInitials(ToFirstChar(e.getAddressName()).toUpperCase());e.setCompleteSpelling(ToPinyin(e.getAddressName()));});return platformAddresses;}public static void main(String[] args) {String ss = ToFirstChar("安徽省");System.out.println(ss);}/*** 获取字符串拼音的第一个字母** @param chinese* @return*/public static String ToFirstChar(String chinese) {String pinyinStr = "";
//		char[] newChar = chinese.toCharArray();  //转为单个字符char[] newChar = new char[]{chinese.toCharArray()[0]};  //转为单个字符HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (int i = 0; i < newChar.length; i++) {if (newChar[i] > 128) {try {pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0].charAt(0);} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {pinyinStr += newChar[i];}}return pinyinStr;}/*** 汉字转为拼音** @param chinese* @return*/public static String ToPinyin(String chinese) {String pinyinStr = "";char[] newChar = chinese.toCharArray();HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (int i = 0; i < newChar.length; i++) {if (newChar[i] > 128) {try {pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0];} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}} else {pinyinStr += newChar[i];}}return pinyinStr;}}

批量更改数据sql

<update id="updateDataById" parameterType="java.util.List"><foreach collection="list" item="item" separator=";">update platform_address set initials=#{item.initials},complete_Spelling = #{item.completeSpelling}where id =#{item.id}</foreach>
</update>

数据库连接 必须配置,否则不能批量更改,以下是参考链接

https://blog.csdn.net/carbuser_xl/article/details/127045359

 url: jdbc:mysql://rm:5888/first_pet_dev?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowMultiQueries=true

拼音依赖

  <dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>

线程池工具类

import org.apache.tomcat.util.threads.ThreadPoolExecutor;import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;/*** 描述:* 线程池工具类* - 所有线程的创建与使用请调用此类的方法** @author zhaofeng* @date 2023-08-29*/
public class ThreadPoolUtils {/*** http异步请求* 耗时相对较长,取核心数*2* 阻塞时间60秒* 空闲时间超过60秒后销毁线程*/public static final ThreadPoolExecutor httpThreadPool = new ThreadPoolImpl(8, 16, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1024), new ThreadPoolExecutor.AbortPolicy());/*** 数据库操作请求* 相较http请求耗时较短* 取核心线程数*1* 阻塞时间60秒*/public static final ThreadPoolExecutor sqlThreadPool = new ThreadPoolImpl(4, 8, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(1024), new ThreadPoolExecutor.AbortPolicy());}

相关文章:

CountDownLatch 批量更改使用,

代码 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.first.pet.platform.entity.PlatformAddress; import com.first.pet.platform.mapper.PlatformAddressMapper; …...

910数据结构(2019年真题)

算法设计题 问题1 有一种排序算法叫做计数排序。这种排序算法对一个待排序的表(采用顺序存储)进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个元素,扫描待排序的表一趟,统计表中有多少个元素的关…...

推荐系统实践 笔记

诸神缄默不语-个人CSDN博文目录 这是我2020年写的笔记&#xff0c;我从印象笔记搬过来公开。 如果那年还在读本科的同学也许有印象&#xff0c;那年美赛出了道根据电商评论给商户提建议的题。其实这件事跟推荐系统关系不大&#xff0c;但我们当时病急乱投医&#xff0c;我打开…...

【JavaEE】JUC(Java.util.concurrent)常见类

文章目录 前言ReentrantLock原子类线程池信号量CountDownLatch相关面试题 前言 经过前面文章的学习我们大致了解了如何实现多线程编程和解决多线程编程中遇到的线程不安全问题&#xff0c;java.util.concurrent 是我们多线程编程的一个常用包&#xff0c;那么今天我将为大家分…...

清除浮动的方法

为什么需要清除浮动&#xff1f; 父级的盒子不能把height定死这样&#xff0c;浮动子类就没有了&#xff08;行内块元素的特点&#xff09;&#xff0c;父类高度为零。故引用清除浮动 1、父级没有高度 2、子盒子浮动了 3、影响下面的布局了&#xff0c;我们就应该清除浮动了…...

LangChain 摘要 和问答示例

在Azure上的OpenAI端点 注意 OpenAI key 可以用微软 用例【1. 嵌入 &#xff0c;2. 问答】 1. import os import openai from langchain.embeddings import OpenAIEmbeddings os.environ["OPENAI_API_KEY"] "****" # Azure 的密钥 os.environ["OP…...

(32)测距仪(声纳、激光雷达、深度摄影机)

文章目录 前言 32.1 单向测距仪 32.2 全向性近距离测距仪 32.3 基于视觉的传感器 前言 旋翼飞机/固定翼/无人车支持多种不同的测距仪&#xff0c;包括激光雷达&#xff08;使用激光或红外线光束进行距离测量&#xff09;、360 度激光雷达&#xff08;可探测多个方向的障碍…...

教你拥有一个自己的QQ机器人!0基础超详细保姆级教学!基于NoneBot2 Windows端搭建QQ机器人

0.序言 原文链接&#xff1a;教你本地化部署一个QQ机器人本教程主要面向Windows系统用户教程从0开始全程详细指导&#xff0c;0基础萌新请放心食用&#x1f355;如果你遇到了问题&#xff0c;请仔细检查是否哪一步有遗漏。如果你确定自己的操作没问题&#xff0c;可以到原文链…...

智能银行卡明细筛选与统计,轻松掌握账户总花销!

作为现代生活的重要组成部分&#xff0c;银行卡成为了我们日常消费和收入的主要途径。但是&#xff0c;当我们需要了解自己的银行卡账户的总花销时&#xff0c;繁琐的明细筛选和统计工作常常让人头疼。现在&#xff0c;让我们向您推荐一款智能银行卡明细筛选与统计工具&#xf…...

SRT服务器SLS

目前互联网上的视频直播有两种&#xff0c;一种是基于RTMP协议的直播&#xff0c;这种直播方式上行推流使用RTMP协议&#xff0c;下行播放使用RTMP&#xff0c;HTTPFLV或者HLS&#xff0c;直播延时一般大于3秒&#xff0c;广泛应用秀场、游戏、赛事和事件直播&#xff0c;满足了…...

Linux 安装 Android SDK

先安装jdk RUN apt-get install default-jdk 参考&#xff1a;http://t.zoukankan.com/braveym-p-6143356.html mkdir -p $HOME/install/android-sdk wget https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip unzip commandlinetools-linu…...

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.4 鼠标按下、移动、释放事件

本章要实现的整体效果如下&#xff1a; QEvent::MouseButtonPress ​ 鼠标按下时&#xff0c;触发该事件&#xff0c;它对应的子类是 QMouseEvent QEvent::MouseMove ​ 鼠标移动时&#xff0c;触发该事件&#xff0c;它对应的子类是 QMouseEvent QEvent::MouseButtonRel…...

vue3父子通信+ref,toRef,toRefs使用实例

ref是什么? 生成值类型的响应式数据可用于模板和reactive通过.value修改值可以获取DOM元素 <p ref”elemRef”>{{nameRef}} -- {{state.name}}</p> // 获取dom元素 onMounted(()>{ console.log(elemRef.value); }); toRef是什么? 针对一个响应式对象(rea…...

输入电压转化为电流性 5~20mA方案

输入电压转化为电流性 5~20mA方案 方案一方案二方案三 方案一 XTR111是一款精密的电压-电流转换器是最广泛应用之一。原因有二&#xff1a;一是线性度非常好、二是价格便宜。总结成一点&#xff0c;就是性价比高。 典型电路 最终电路 Z1二极管处输出电流表达式&#xff1a;…...

SpringBoot自带模板引擎Thymeleaf使用详解①

目录 前言 一、SpringBoot静态资源相关目录 二、变量输出 2.1 在templates目录下创建视图index.html 2.2 创建对应的Controller 2.3 在视图展示model中的值 三、操作字符串和时间 3.1 操作字符串 3.2 操作时间 前言 Thymeleaf是一款用于渲染XML/HTML5内容的模板引擎&am…...

推荐算法——Apriori算法原理

0、前言&#xff1a; 首先名字别读错&#xff1a;an pu ruo ao rui 【拼音发音】Apriori是一种推荐算法推荐系统&#xff1a;从海量数据中&#xff0c;帮助用户进行信息的过滤和选择。主要推荐方法有&#xff1a;基于内容的推荐、协同过滤推荐、基于关联规则的推荐、基于知识的…...

vue ant 隐藏 列

vue ant 隐藏 列 如果你使用的是Vue和Ant Design Vue组件库&#xff0c;你可以使用v-if指令来实现条件渲染来隐藏列。以下是一个示例代码&#xff1a; <template><a-table :columns"columns" :data-source"data"><template v-slot:custom…...

java基础之初始化顺序

初始化顺序 在类中变量定义的顺序决定了它们初始化的顺序。在创建任何java对象时&#xff0c;都是依次调用父类非静态初始化块、父类构造器执行初始化、本类的非静态初始化块、本类构造器执行初始化 public class House { // 构造器之前 Window w1 new Window(1); Ho…...

FFmpeg 命令:从入门到精通 | ffmpeg filter(过滤器 / 滤镜)

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09; FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09;ffmpeg fliter 基本内置变量视频裁剪文字水印图片水印画中画视频多宫格处理 FFmpeg 命…...

【C语言】23-结构体类型

目录 1. 如何建立结构体类型2. 如何使用结构体2.1 定义结构体变量2.2 结构体变量的初始化和引用2.3 结构体数组2.4 结构体指针2.4.1 指向结构体变量的指针2.4.2 指向结构体数组的指针C 语言提供了一些由系统已定义好的数据类型,如: int、 float、 char 等,用户可以在程序…...

Chrome QRCode:浏览器原生二维码生成与解析的极简技术方案

Chrome QRCode&#xff1a;浏览器原生二维码生成与解析的极简技术方案 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件&#xff0c;用于生成当前URL或者选中内容的二维码&…...

EMAC寄存器系统:网络诊断与性能优化的关键

1. EMAC寄存器系统概述以太网媒体访问控制器&#xff08;EMAC&#xff09;是现代网络设备中负责数据链路层操作的核心硬件模块。作为网络通信的"交通警察"&#xff0c;EMAC不仅负责以太网帧的收发调度&#xff0c;还通过精密的寄存器系统记录着网络通信的每一个关键细…...

心灵鸡汤01 - 人生九不争

一、跟父母&#xff0c;不争口舌&#xff1b; 二、跟朋友&#xff0c;不争面子&#xff1b; 三、跟领导&#xff0c;不争高低&#xff1b; 四、跟小人&#xff0c;不争道理&#xff1b; 五、跟伴侣&#xff0c;不争对错&#xff1b; 六、跟亲戚&#xff0c;不争穷富&#xff1b…...

LaTeX排版避坑指南:为什么你的多图caption编号对不齐?一个案例讲清subfig、minipage和tabular的选择

LaTeX多图排版实战&#xff1a;从编号错乱到完美对齐的解决方案 第一次在学术论文中遇到多图排版问题时&#xff0c;我盯着那个歪歪扭扭的(c)编号看了整整十分钟——它本该和(a)(b)整齐排列&#xff0c;却像迷路的孩子一样缩在角落。更糟的是&#xff0c;当我引用这些子图时&am…...

一次搞清楚:Agent、Skill、Prompt、MCP

文章深入探讨了AI Agent在落地过程中面临的三大核心痛点&#xff1a;Prompt的临时性与不可复用性、Agent专业能力的难以沉淀与迁移、以及AI能力无法融入现有工程化流程。文章提出Agent Skills作为AI Agent的专业能力说明书&#xff0c;通过标准化能力描述与执行框架&#xff0c…...

动态自适应网络:让AI模型根据输入复杂度智能调节算力与精度

1. 项目概述&#xff1a;当计算机视觉遇见能效瓶颈在边缘计算和移动设备上部署深度神经网络&#xff08;DNN&#xff09;进行计算机视觉任务&#xff0c;比如人脸识别、物体检测&#xff0c;已经不是什么新鲜事了。但一个老生常谈的痛点始终横在那里&#xff1a;算力、功耗和精…...

MooseFS企业级部署方案:多数据中心架构设计与实施指南

MooseFS企业级部署方案&#xff1a;多数据中心架构设计与实施指南 【免费下载链接】moosefs MooseFS Distributed Storage – Open Source, Petabyte, Fault-Tolerant, Highly Performing, Scalable Network Distributed File System / Software-Defined Storage 项目地址: h…...

如何利用WinRAR分卷压缩,轻松突破大文件传输限制

1. 为什么需要分卷压缩&#xff1f; 在日常工作和生活中&#xff0c;我们经常会遇到需要传输大文件的情况。比如设计师要发送PSD源文件给客户&#xff0c;程序员要分享开发环境的镜像&#xff0c;或者普通用户想通过邮件发送高清视频给亲友。但几乎所有主流传输平台都对单个文件…...

【MySQL】《MySQL索引核心分类面试高频考点问答清单》(附:《一页纸速记版》)

文章目录《MySQL索引核心分类面试高频考点问答清单》一、基础概念类&#xff08;入门必问&#xff09;Q1&#xff1a;MySQL索引的本质是什么&#xff1f;核心作用有哪些&#xff1f;Q2&#xff1a;MySQL常用的索引数据结构有哪些&#xff1f;各自特点是什么&#xff1f;Q3&…...

连开车回家都靠肌肉记忆——芯片工程师到底有多累

下班开车&#xff0c;到家的时候不记得路上发生了什么。这件事很多芯片工程师都经历过。那种精神层面的透支——脑子里塞满了太多东西&#xff0c;意识没有余量去关注开车这件事&#xff0c;只能交给身体的自动驾驶。体力劳动的疲惫&#xff0c;睡一觉就好了。芯片研发的疲惫不…...