Java多线程分批处理数据
场景:发短信,当有数据量庞大的短信需要发送时,可以采用多线程的方式分批处理以提高效率,但线程要控制合适的数量,否则会极大消耗CPU资源
上代码:
创建分页类PageUtil
/*** 分页* @param list 切割数据集合* @param pageSize 每页记录数* @param <T>* @return*/
public static <T> List<List<T>> splitList(List<T> list, int pageSize) {int listSize = list.size();int page = (listSize + (pageSize - 1)) / pageSize;List<List<T>> listArray = new ArrayList<List<T>>();for (int i = 0; i < page; i++) {List<T> subList = new ArrayList<T>();for (int j = 0; j < listSize; j++) {int pageIndex = ((j + 1) + (pageSize - 1)) / pageSize;if (pageIndex == (i + 1)) {subList.add(list.get(j));}if ((j + 1) == ((j + 1) * pageSize)) {break;}}listArray.add(subList);}return listArray;}
创建实现Runnable接口的线程类TestThread
public class TestThread implements Runnable{private List<UserEntity> userEntityList;public TestThread(List<UserEntity> userEntityList) {this.userEntityList = userEntityList;}@Overridepublic void run() {for (UserEntity userEntity: userEntityList){try {Thread.sleep(500);} catch (InterruptedException e) {}System.out.println("name:"+Thread.currentThread().getName()+userEntity.toString());}}
}
创建实体类UserEntity
public class UserEntity {private String userId;private String userName;public UserEntity() {}public UserEntity(String userId, String userName) {this.userId = userId;this.userName = userName;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Overridepublic String toString() {return "UserEntity{" +"userId='" + userId + '\'' +", userName='" + userName + '\'' +'}';}
}
创建主类BatchThread
public class BatchThread {public static void main(String[] args) {List<UserEntity> userList = initUser();int userCount = 2;List<List<UserEntity>> pageList = PageUtil.splitList(userList, userCount);for (int i = 0; i < pageList.size(); i++){List<UserEntity> userEntityList = pageList.get(i);TestThread testThread = new TestThread(userEntityList);Thread thread = new Thread(testThread);thread.start();}}public static List<UserEntity> initUser(){List<UserEntity> userEntityList = new ArrayList<>();for (int i = 1; i <= 11; i++){userEntityList.add(new UserEntity("id:"+i, "username:"+i));}return userEntityList;}
}
结果:
Java多线程分批处理数据相关推荐
- 使用java多线程分批处理数据工具类
最近由于业务需要,数据量比较大,需要使用多线程来分批处理,提高处理效率和能力,于是就写了一个通用的多线程处理工具,只需要实现自己的业务逻辑就可以正常使用,现在记录一下 主要是针对大数据量list,将l ...
- java 多线程 数据重复,java 多线程 出现数据重复调用有关问题
java 多线程 出现数据重复调用问题 线程操作过程描述: 1.线程查询数据库表(table1)数据,并遍历修改记录状态(防止出现数据重复调用).(此操作加入了同步锁) 2.调用接口,获取返回的状态. ...
- 【多线程编程学习】java多线程基于数据分割的大文件下载器
文章目录 代码:基于数据分割的大文件下载器 作为包装的存储对象类: 主文件下载类: 子任务下载类: 处理缓存: 启动类: 数据分割思想产生的问题 代码来自书籍<java多线程编程实战指南> ...
- java多线程 丢数据_多线程list.add()丢数据
问题: 根据项目业务需求需要统计数据传到前台以图表显示,每天数据量大概20万多,但是每次统计只能统计出10万的数据量,出现数据丢失. 原因: 该接口在之前一次优化时加了多线程,但是数据汇总用的仍是Ar ...
- mysql 多进程 分批_多线程分批处理数据
需求: 给10万个用户每个用户发一条祝福短信. 为了提高数程序的效率,请使用多线程技术分批发送据. 每开一个线程,都会占用CPU资源 服务器(电脑)配置 CPU 核数 建立项目名称:rain_thre ...
- java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...
多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...
- java 多线程共享数据_Java多线程学习:多个线程间共享数据
多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两 ...
- java多线程采集+线程同步-【多线程数据采集之四】
前些日子讲解了java数据抓取, 今天就讲解最核心的. java多线程数据抓取. java多线程采集+数据同步+线程同步[多线程数据采集之四] 主要讲解多线程抓取,多线程同步,多线程启动,控制等操作. ...
最新文章
- python【数据结构与算法】选数问题(指定值求和——递归)
- TestNG 自动化测试入门教程--典型示例
- 【Flask】ORM的关联关系
- Supplier 点participate时候用USB KEY的身份验证
- 济南昊锐科技谈程序员与用户UI
- iOS常用手势识别器
- linux的jar命令不能使用,经常使用的linux下jar包管理命令
- LOJ6031 「雅礼集训 2017 Day1」字符串 SAM、根号分治
- Qt 安装组件及其说明(by shany shang)
- 推荐歌曲《 起风了》
- RN通信底层原理 -- 总结篇
- Dubbo Failover机制
- ADAUDSP1452 声场 Balance与Fader功能的实现
- 全网官方开放API平台接口整合
- oracle查询数字类溢出,有趣的数值溢出(一)
- 用核显能跑matlab吗,5张图告诉你核显究竟能干嘛
- java面向对象的程序编程设计
- 笔记本电脑3C认证要求的相关介绍
- 如何在MacOS上卸载IPGuard的软件--LAgent/LSDhelper程序
- 基督山伯爵---大仲马