java处理百万数据,最简单明了的写法
注意分割需要引用爪哇pom
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
/**
* 新增项目通道网络
*/
@PostMapping("/rouPathNetWorkAddBatch")
public AjaxResult rouPathNetWorkAddBatch(@RequestBody List<PrjRoutingpathNetwork> rouTingPathNetworkList) throws ExecutionException, InterruptedException {
//按1000条分割
List<List<PrjRoutingpathNetwork>> networkList = ListUtils.partition(rouTingPathNetworkList, 1000);
//获取线程池中的@bean
ThreadPoolTaskExecutor executor = SpringUtils.getBean("threadPoolTaskExecutor");
//倒计数器,networkList.size是锁数量也是 线程数量
CountDownLatch latch = new CountDownLatch(networkList.size());
try{
for (List<PrjRoutingpathNetwork> n : networkList) {
//每次循环创建一个线程 new Runnable()
executor.execute(new Runnable() {
@Override
public void run() {
//执行任务
prjRoutingpathNetworkService.insertPrjRoutingpathNetworks(n);
//去掉一把锁
latch.countDown();
}
});
}
//校验锁数量是否为0,(还有没有)
latch.await();
}catch (Exception e){
return AjaxResult.error("导入出现错误");
}
return toAjax(1);
}
下一篇:
Java实习生找工作需要注意的几点
