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;
}
}