java excel 多线程_线程池分批处理excel数据

本文介绍了一个Java程序,通过Hutool库读取Excel文件,并使用线程池按200行分批处理数据。程序首先读取Excel文件,然后将数据分段,创建固定大小的线程池进行并发处理。每个线程负责处理一部分数据,最后输出处理结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.bds.pool.ihg_fb;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importcn.hutool.core.io.FileUtil;importcn.hutool.poi.excel.ExcelReader;importcn.hutool.poi.excel.ExcelUtil;/*** @ClassName: PoolThread.java

* @Description: 开启线程池

*@author: jack.Lu

*@version: V1.0

* @Date : 2019年7月11日 下午2:18:35*/

public classPoolThread {

/**

*程序的入口

*/public static void main(String args[])throwsException{

readExcel();

}/*** 1.读取excel

* 2.对excel进行200分段

* 3.开启线程池

*@paramargs*/

public static voidreadExcel(){//1.读取excel

ExcelReader excelReader = ExcelUtil.getReader(FileUtil.file("C:\\Users\\admin\\Desktop\\新建文件夹\\XHS 笔记需求 0709-03.xlsx"));

List> read =excelReader.readAll();

PoolThread pl= newPoolThread();

List> excelByRead = pl.getExcelByRead(read);//500条数据,每200一条,共3组//要开启的线程数//3组

int size =excelByRead.size();

ExecutorService pool= Executors.newFixedThreadPool(size+1);

List task_list = new ArrayList();for (int i = 0; i < size; i++) {

List list =excelByRead.get(i);

DealExcel dx= new DealExcel(i+"-",list);

task_list.add(dx);

pool.execute(dx);

}//结束线程池

pool.shutdown();while(true) {if(pool.isTerminated()) {break;

}try{

Thread.sleep(100);

}catch(InterruptedException e) {

e.printStackTrace();

}

}

String s= "";for(DealExcel d : task_list) {

s= s+d.getThread_name()+":"+(d.getSuccess()?"成功":"失败")+";";

}

System.out.println("----------------------------------------------");

System.out.println(s);

}/*** 以200为临界点 每200个放入一个String数组中,再放入List 集合中

*@paramread

*@return

*/

private List> getExcelByRead(List>read) {

List> list_list = new ArrayList<>();int size =read.size();int group = 200;int num = size/group;if(size%group!=0) {//说明不是整数101-》1+1=2

num = num +1;

}

System.out.println("准备创建几个数组就是开启多少线程:"+num);//开始遍历excel

int temp = 0;for (int j = 1; j <= num; j++) {

List list = new ArrayList<>();for (int i = temp; i < size; i++) {

Map map =read.get(i);

String keyword= map.get("keyword")+"";

list.add(keyword);if ((i+1)%group==0) {

temp=i+1;break;

}

}

System.out.println("*****已经加入集合"+j+"次");

list_list.add(list);

}

System.out.println("########################添加结束##################################");returnlist_list;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值