因为工作原因要学习多线程异步解析数据我不知道我的操作对不对,突发奇想用多线程来解析Excel数据,Excel数据量不是很大也不是很小二十三万多条,最后比较解析耗时发现单线程居然比多线程快。
多线程使用方法如下:
1.创建ExcelThread类实现Callable接口
2.解析方法
public <T> List<T> threadExcel(InputStream in, String fileName,T object){
try {
ArrayList<T> objList = new ArrayList<T>();
Workbook work = this.getWorkbook(in,fileName);
Sheet sheet=null;
List<Future<List<List>>> futures=new ArrayList<>();
for (int i = 0; i < work.getNumberOfSheets(); i++) {
sheet = work.getSheetAt(i);
int rowLength=sheet.getLastRowNum();//获取Excel数据行数
int threadCount=10;//线程池最大线程数量
//int rowStart=sheet.getFirstRowNum();//开始解析的行数;
int size=rowLength%threadCount==0?(rowLength/threadCount):(rowLength/threadCount)+1;//每个线程解析多少条
ExecutorService executorService=Executors.newFixedThreadPool(threadCount);//创建线程池
for (int j=0;j<threadCount;j++){
int start=j*size;
int end=((j+1)*size)-1;
Callable<List<List>> callable=new ExcelThread(start,end,sheet);
Future<List<List>> future=executorService.submit(callable);
futures.add(future);
}
for (Future<List<List>> future:futures){
List<List> obj= future.get();//得到数据集合
//编辑集合转换成对象
for (List<Object> entity:obj){
objList.add(formatData(entity,object));
}
}
executorService.shutdown();
}
return objList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
不知为何会多线程会比单线程慢