mysql 5.7
jdk1.8
优化思路
单线程插入太慢
多线程插入,提前把需要插入的列表分割
分割列表
Map<Integer,List<BizBrrowEntity>> map = new HashMap<>();
int index=0;
int cishu=0;
int tem=0;
while (true){
if (index==0&¶m.size()<100){
// boolean b = bizBookService.saveBatch(param);
map.put(1,param);
break;
}else {
index=index+100;
cishu=cishu+1;
if(cishu==1){
List<BizBrrowEntity> bizBrrowEntities = param.subList(0, index);
map.put(cishu,bizBrrowEntities);
}else if(index>param.size()){
List<BizBrrowEntity> bizBrrowEntities = param.subList(tem, param.size());
map.put(cishu,bizBrrowEntities);
break;
}else {
List<BizBrrowEntity> bizBrrowEntities = param.subList(tem, index);
map.put(cishu,bizBrrowEntities);
}
tem=index;
}
}
多线程插入
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (Map.Entry<Integer, List<BizBrrowEntity>> integerListEntry : map.entrySet()) {
Future future = executorService.submit(new Runnable() {
public void run() {
System.out.println("Asynchronous task");
bizBookService.saveBatch(integerListEntry.getValue());
System.out.println("当前线程是:"+Thread.currentThread().getName());
}
});
}
executorService.shutdown();
long l1 = System.currentTimeMillis();
Long c =l1-l;
System.out.println("耗时"+c);
单线程耗时耗时73624
多线程耗时128