java多线程对数据的操作,最大线程处理数,可根据实际情况进行合理设计

主要就是,多线程合理分配数据资源,不要造成多个线程争抢一个数据资源从而导致死锁就得不偿失了。本文作为参考,实际操作时,你可以将mapper注入进来,操作数据库等一系列对数据处理的方法皆可以

package com.org.thread;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 多线程操作工具类*/
public class ExecutorUtils {public static void main(String[] args) {// 造5000条数据(可根据实际情况造数据)final Integer listSize = 1000000;ArrayList<String> list = new ArrayList<>();for (int i = 0; i < listSize; i++) {String user = "这是一条数据";list.add(user);}executeThreadPool(list);}// 一个线程最大处理数据量private static final int THREAD_COUNT_SIZE = 5000;public static void executeThreadPool(List<String> pmsProductList) {long start = System.currentTimeMillis();// 线程数,以5000条数据为一个线程,总数据大小除以5000,再加1int round = pmsProductList.size() / THREAD_COUNT_SIZE + 1;// 程序计数器final CountDownLatch count = new CountDownLatch(round);// 创建线程ExecutorService executor = Executors.newFixedThreadPool(round);// 分配数据for (int i = 0; i < round; i++) {int startLen = i * THREAD_COUNT_SIZE;int endLen = ((i + 1) * THREAD_COUNT_SIZE > pmsProductList.size() ? pmsProductList.size(): (i + 1) * THREAD_COUNT_SIZE);final List<String> threadList = pmsProductList.subList(startLen, endLen);int k = i + 1;executor.execute(new Runnable() {@Overridepublic void run() {// 我这里用的是 jpa的直接添加一个list,当然这里可以把list,for循环然后调用// 接口添加数据库,或者进行其他数据操作System.out.println("正在处理线程【" + k + "】的数据,数据大小为:" + threadList.size());// 计数器 -1(唤醒阻塞线程)count.countDown();}});}try {// 阻塞线程(主线程等待所有子线程 一起执行业务)count.await();long end = System.currentTimeMillis();System.out.println("100万数据插入查询耗时:" + (end - start) + "ms");} catch (Exception e) {e.printStackTrace();} finally {// 终止线程池// 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。若已经关闭,则调用没有其他作用。executor.shutdown();}}
}

java多线程处理百万数据相关推荐

  1. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

  2. Java 近百万数据查询和导出共用时2分钟左右

    特别感谢 https://www.cnblogs.com/barrywxx/p/10700283.html 提供的模板导出的技术和思路 测试环境: 1.jdk1.8  springboot  myba ...

  3. Java 百万数据秒级导出到Excel中

    出自: 腾讯课堂 700多分钟干货实战Java多线程高并发高性能实战全集 , 我学习完了之后, 我给 老师在课上说的话做了个笔记,以及视频的内容,还有代码敲了一遍,然后添加了一些注释,把执行结果也整理 ...

  4. Caused by: java.sql.SQLException: GC overhead limit exceeded处理百万数据出现的异常

    Caused by: java.sql.SQLException: GC overhead limit exceeded处理百万数据出现的异常 参考文章: (1)Caused by: java.sql ...

  5. java一次性查询几十万,几百万数据解决办法

    java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指导一下,有什么好方法没有啊 1.先批量查出所有 ...

  6. 多线程处理大量数据 java

    项目场景: 简述项目相关背景: 例如:获取大量数据并处理,生成execl文件导出 问题描述: 5W条数据处理后生成execl文件需要6个小时,效率慢 APP 中接收数据代码: @Overridepub ...

  7. java 百万数据查询_java一次性查询几十万,几百万数据解决办法

    java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指导一下,有什么好方法没有啊 1.先批量查出所有 ...

  8. java查询几万条数据_java一次性查询几十万,几百万数据解决办法(转载)

    0hB)H"aK ZJ%K Z0java查询一次性查询几十万,几百万数据解决办法51Testing软件测试网0L?pAzOk51Testing软件测试网2@ai.g\1p 很早的时候写工具用 ...

  9. java查询几万条数据_java一次性查询几十万,几百万数据解决办法

    java一次性查询几十万,几百万数据解决办法 java查询一次性查询几十万,几百万数据解决办法 很早的时候写工具用的一个办法. 当时是用来把百万数据打包 成rar文件. 所以用了个笨办法. 希望高手指 ...

最新文章

  1. 汪星人出门也靠脸?狗脸识别技术可识别化妆后的汪星人,准确率99%
  2. C# ASP.NET 开发指引简要
  3. 剑指offer八:跳台阶
  4. 羊皮卷的故事-第十章-羊皮卷之三
  5. 一站式解决使用枚举的各种痛点
  6. 《挑战30天C++入门极限》C/C++中字符串常量的不相等性及字符串的Copy
  7. 魔兽争霸Ⅲ运行时不能初始化directX的错误解决
  8. C++网易云课堂开发工程师--转换函数
  9. 树莓派linux i2c通信,树莓派与i2c设备的通信
  10. 使用JQuery做一组复选框的功能。
  11. Vue_(组件)计算属性
  12. 向量叉乘意义amp;amp;NYOJ68三点顺序
  13. 在vue中将数据导出为excel文件file-saver+xlsx+script-loader
  14. [RPI]关于树莓派3B+的AV接口(RCV)
  15. java输出数据超过5个换行
  16. 面向对象的特征之一:抽象
  17. 【学习编程】献给迷茫中的你,教你如何快速入门编程,如何从编程小百到 IT 巨佬?零基础自学请收下这份学习指南(经验分享)
  18. 7-4 偶数乘2奇数乘3 (10分)
  19. win 下光盘刻录方式
  20. Windows编程-判断一个程序是64还是32位的小程序

热门文章

  1. js转换px与mm, cm
  2. html常用标签汇总
  3. PHP删除文件夹及文件夹下的所有文件
  4. OCR文字技术与行业应用
  5. 解决谷歌访问本地文件和跨域问题
  6. 聊聊如何做好设计师管理
  7. C++之RAII技术解析
  8. Word2010页眉页脚设置教程
  9. 比较两张表的数据是否相同
  10. mysql数据库数据存储与磁盘IO