java并发执行批量插入

java并发执行批量插入

1、mybatis-plus批量插入

  • long start = System.currentTimeMillis();int num = 5000;  //一次批量插入的数量int j = 0;for (int i = 0;i<20;i++){List<User> userList = new ArrayList<>();while (true){j++;User user = new User();user.setUserProfile("我是假数据");user.setUsername("假数据");user.setAvatarUrl("https://xxxxxx.jpg");user.setGender(0);user.setUserAccount("jiazzj");user.setUserPassword("2970a1691c8ef07f40ddbe6f7b18662f");user.setPhone("123456789");user.setEmail("123456@qq.com");user.setUserStatus(0);user.setUserRole(0);String[] str = new String[]{"java","考研"};Gson gson = new Gson();String json = gson.toJson(str);user.setTags(json);userList.add(user);if (j % num == 0){break;}}userService.saveBatch(userList,num);  //mybatis-plus通过传入列表批量插入}long end = System.currentTimeMillis();System.out.println("用时:"+(end - start));
    
  • 用时:6544 ms

2、采用Java并发运行

  • 多线程分析

    • 这里批量插入数据,是 io 密集任务,我们可以分配比 cpu核心数多的线程并发工作
  •     private ExecutorService executorService = new ThreadPoolExecutor(40, 1000, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(2500));
    
    • 分配 40 个线程
    • 最大线程数为 1000
    • 非核心线程闲置超时时间为 :1分钟
    • 任务队列容量为 2500
  • image-20240203111839623

  • 现在MySQL含有20万,准备执行

  •     long start = System.currentTimeMillis();int num = 2500;int j = 0;List<CompletableFuture<Void>> futureList = new ArrayList<>();for (int i = 0; i < 40; i++) {List<User> userList = new ArrayList<>();while (true){j++;User user = new User();user.setUserProfile("我是假数据");user.setUsername("假数据");user.setAvatarUrl("https://xxxx.jpg");user.setGender(0);user.setUserAccount("jiazzj");user.setUserPassword("2970a1691c8ef07f40ddbe6f7b18662f");user.setPhone("123456789");user.setEmail("123456@qq.com");user.setUserStatus(0);user.setUserRole(0);String[] str = new String[]{"java","考研"};Gson gson = new Gson();String json = gson.toJson(str);user.setTags(json);userList.add(user);if (j % num == 0){break;}}//定义一个异步任务进行批量插入CompletableFuture<Void> future = CompletableFuture.runAsync(()->{System.out.println("线程名" + Thread.currentThread().getName());userService.saveBatch(userList, num);},executorService);//每个任务执行完,放人list列表里futureList.add(future);}//等待线程全部执行完后执行后续操作CompletableFuture.allOf(futureList.toArray(new CompletableFuture[]{})).join();long end = System.currentTimeMillis();System.out.println("用时:"+(end - start));
    
  • 用时:1889ms,可以看到这里是40个线程并发执行的任务,提升很显著

  • image-20240203112203905

  • image-20240203112302297

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

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

相关文章

Linux笔记之bash脚本中的$符号

Linux笔记之bash脚本中的$符号 code review! 文章目录 Linux笔记之bash脚本中的$符号$符号和大括号{}结合使用 在 Bash 脚本中&#xff0c;$ 符号被用于许多不同的上下文中&#xff0c;主要用于访问变量的值、参数扩展、算术运算以及命令替换等&#xff1a; 访问变量的值 当你…

【论文笔记】GS++: Error Analyzing and Optimal Gaussian Splatting

原文链接&#xff1a;https://browse.arxiv.org/abs/2402.00752 1. 引言 许多基于3D高斯溅射&#xff08;3D-GS&#xff09;的方法针对稀疏视图场景的鲁棒性、性能和存储效率进行增强&#xff0c;但没有专门处理高斯投影的误差。 3D-GS以一组图像和相机通过SfM校准产生的点云…

LabVIEW电能质量监测系统

LabVIEW电能质量监测系统 随着全球能源需求的增加以及能源危机的加剧&#xff0c;对电能的有效利用和质量监控变得越来越重要。特别是在电力系统中&#xff0c;电能质量的监测对于保证电力设备的稳定运行和提高能源利用效率具有重要意义。采用LabVIEW软件开发了一套高效的电能…

使用PHPStudy搭建Cloudreve网盘服务

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

充电桩项目实战:短信功能 分布式限流

你好&#xff0c;我是田哥 最近&#xff0c;我在对充电桩项目进行微服务升级中&#xff0c;肯定会遇到一些问题 前面分享了&#xff1a;充电桩项目实战&#xff1a;搞定多数据源&#xff01; 题外话&#xff1a;如果想年后找到更好的工作&#xff0c;推荐看这篇文章&#xff1a…

高端酒店宴会包间桌位预定小程序h5开源版开发

高端酒店宴会包间桌位预定小程序h5开源版开发 餐厅预定桌位系统&#xff0c;支持多店切换预约&#xff0c;提供全部前后台无加密源代码和数据库 功能特性 为你介绍餐厅预订系统的功能特性 多端适配 采用uniapp,目前适配小程序和微信H5 多店铺 支持多店铺预定 付费和免费预定 支…

介绍 HTTPS 中间人攻击

介绍 HTTPS 中间人攻击 https协议是由httpssl协议构成的。 客户端和服务端SSL或TLS能够相互通信的基本步骤 确定使用协议的版本 选择加密算法 通过交换和验证数字证书彼此进行身份验证 使用非对称加密技术生成共享密钥&#xff0c;避免密钥分发问题。 SSL或TLS使用共享密钥对消…

软件包模块、服务模块、逻辑卷模块、文件系统模块、playbook剧本,YAML语法规范、playbook剧本案例

ansible ansible模块 yum_repository 用于配置yum 常用选项&#xff1a; file&#xff1a; 指定文件名其他选项&#xff0c;请与文件内容对照 # 在webservers组中的主机上&#xff0c;配置yum[rootpubserver ansible]# ansible webservers -m yum_repository -a "file…

请解释Java中的equals()和hashCode()方法的作用和区别。请解释Java中的AOP(面向切面编程)的作用和原理。

请解释Java中的equals()和hashCode()方法的作用和区别。 在Java中&#xff0c;equals()和hashCode()方法都是用于处理对象相等性&#xff08;equality&#xff09;的方法。 equals()方法&#xff1a; equals()方法是Object类中定义的方法&#xff0c;所有的Java类都可以使用该…

vscode连接ssh失败记录(20240202)

问题描述&#xff1a; 1、在使用vscode remote-ssh插件时连接较老版本linux时&#xff0c;出现报错Warning: Missing GLIBC > 2.28! from /lib/x86_64-linux-gnu/libc-2.27.so Error: Missing required dependencies. Please refer to our FAQ https://aka.ms/vscode-rem…

算法随想录第五十天打卡123.买卖股票的最佳时机III , 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 这道题一下子就难度上来了&#xff0c;关键在于至多买卖两次&#xff0c;这意味着可以买卖一次&#xff0c;可以买卖两次&#xff0c;也可以不买卖。 视频讲解&#xff1a;动态规划&#xff0c;股票至多买卖两次&#xff0c;怎么求&#xff1f; | …

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

什么是 Java 中的 IO 和 NIO?它们之间有什么区别?什么是 Java 中的内存管理和垃圾回收?常见的垃圾回收算法有哪些?

什么是 Java 中的 IO 和 NIO&#xff1f;它们之间有什么区别&#xff1f; 在 Java 中&#xff0c;IO&#xff08;Input/Output&#xff09;和NIO&#xff08;New IO&#xff09;都是用于处理输入输出操作的API。它们之间有以下区别&#xff1a; IO&#xff08;传统IO&#xff…

11月最新版付费进群源码自动定位+开源

Nginx 1.22.1 php5.6 mysql5.6 数据库配置&#xff1a;/config/database.php 配置后台域名&#xff1a;config/extra/ip.php 设置伪静态thinkphp 后台账号88886666 密码12345 代码结构 关键代码剖析 <?php // ----------------------------------------------------…

continue语句

一、continue语句 1、continue语句介绍 2、continue语句流程图 3、快速入门案例 4、continue语句的标签

毫米波雷达在汽车领域的原理、优势和未来趋势

1 毫米波雷达的原理 汽车引入毫米波雷达最初主要是为了实现盲点监测和定距巡航。毫米波实质上是电磁波&#xff0c;其频段位于无线电和可见光、红外线之间&#xff0c;频率范围为10GHz-200GHz。工作原理类似一般雷达&#xff0c;通过发射无线电波并接收回波&#xff0c;利用障…

LeetCode 每日一题 2024/1/29-2024/2/4

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/29 514. 自由之路1/30 2808. 使循环数组所有元素相等的最少秒数1/31 2670. 找出不同元素数目差数组2/1 LCP 24. 数字游戏2/2 1686. 石子游戏 VI2/3 1690. 石子游戏 VII2/…

理论与实战:一篇看懂Python词云

实现原理 导入一篇txt文档&#xff0c;使用jieba库对文档中的文字进行分词&#xff0c;计算各个词汇出现的频率&#xff0c;使用wordcloud库按照词汇频率的大小生成词云。 注意&#xff0c;不是使用wordcloud.generate()&#xff0c;这个方法没有按照词汇频率的方式实现词云 停…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

Linux常见面试题汇总

Linux上如何查询某个端口是否被占用&#xff1f; 在Linux上&#xff0c;你可以使用以下几种方法来查询某个端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <端口号>这个命令会列出当前正在运行的所有TCP和UDP端口&#xff0c;并过滤出指…