场景:发短信,当有数据量庞大的短信需要发送时,可以采用多线程的方式分批处理以提高效率,但线程要控制合适的数量,否则会极大消耗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多线程分批处理数据相关推荐

  1. 使用java多线程分批处理数据工具类

    最近由于业务需要,数据量比较大,需要使用多线程来分批处理,提高处理效率和能力,于是就写了一个通用的多线程处理工具,只需要实现自己的业务逻辑就可以正常使用,现在记录一下 主要是针对大数据量list,将l ...

  2. java 多线程 数据重复,java 多线程 出现数据重复调用有关问题

    java 多线程 出现数据重复调用问题 线程操作过程描述: 1.线程查询数据库表(table1)数据,并遍历修改记录状态(防止出现数据重复调用).(此操作加入了同步锁) 2.调用接口,获取返回的状态. ...

  3. 【多线程编程学习】java多线程基于数据分割的大文件下载器

    文章目录 代码:基于数据分割的大文件下载器 作为包装的存储对象类: 主文件下载类: 子任务下载类: 处理缓存: 启动类: 数据分割思想产生的问题 代码来自书籍<java多线程编程实战指南> ...

  4. java多线程 丢数据_多线程list.add()丢数据

    问题: 根据项目业务需求需要统计数据传到前台以图表显示,每天数据量大概20万多,但是每次统计只能统计出10万的数据量,出现数据丢失. 原因: 该接口在之前一次优化时加了多线程,但是数据汇总用的仍是Ar ...

  5. mysql 多进程 分批_多线程分批处理数据

    需求: 给10万个用户每个用户发一条祝福短信. 为了提高数程序的效率,请使用多线程技术分批发送据. 每开一个线程,都会占用CPU资源 服务器(电脑)配置 CPU 核数 建立项目名称:rain_thre ...

  6. java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  7. java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...

  8. java 多线程共享数据_Java多线程学习:多个线程间共享数据

    多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两 ...

  9. java多线程采集+线程同步-【多线程数据采集之四】

    前些日子讲解了java数据抓取, 今天就讲解最核心的. java多线程数据抓取. java多线程采集+数据同步+线程同步[多线程数据采集之四] 主要讲解多线程抓取,多线程同步,多线程启动,控制等操作. ...

最新文章

  1. python【数据结构与算法】选数问题(指定值求和——递归)
  2. TestNG 自动化测试入门教程--典型示例
  3. 【Flask】ORM的关联关系
  4. Supplier 点participate时候用USB KEY的身份验证
  5. 济南昊锐科技谈程序员与用户UI
  6. iOS常用手势识别器
  7. linux的jar命令不能使用,经常使用的linux下jar包管理命令
  8. LOJ6031 「雅礼集训 2017 Day1」字符串 SAM、根号分治
  9. Qt 安装组件及其说明(by shany shang)
  10. 推荐歌曲《 起风了》
  11. RN通信底层原理 -- 总结篇
  12. Dubbo Failover机制
  13. ADAUDSP1452 声场 Balance与Fader功能的实现
  14. 全网官方开放API平台接口整合
  15. oracle查询数字类溢出,有趣的数值溢出(一)
  16. 用核显能跑matlab吗,5张图告诉你核显究竟能干嘛
  17. java面向对象的程序编程设计
  18. 笔记本电脑3C认证要求的相关介绍
  19. 如何在MacOS上卸载IPGuard的软件--LAgent/LSDhelper程序
  20. 基督山伯爵---大仲马

热门文章

  1. 关于喇叭的选型及设计流程
  2. Target xxx is out of bounds.
  3. cad视口缩放区域怎么使用_cad视口(cad布局和视口使用教程)
  4. 纪念过去的一年 之IV
  5. 如何用OpenSSL从https网站上导出SSL的CA证书?
  6. 平板DNS服务器未响应,ipad应用验证没反应
  7. 解释结构模型ISM-2-3
  8. blender创建简单的三角化网格模型(保存为obj)
  9. Linux:Samba 文件共享服务器的搭建与访问
  10. 刚入职985的他,发了Science!