//传入参数是文件列表 FileList 里面包含文件路径文件名 public void dealFile( ListFileList segments) { try { if (null == segments || segments.isEmpty()) { return; } //子线程计数器 参数是子线程个数及分段数
//传入参数是文件列表 FileList 里面包含文件路径文件名
public void dealFile( List<FileList> segments) {
try {
if (null == segments || segments.isEmpty()) {
return;
}
//子线程计数器 参数是子线程个数及分段数
final CountDownLatch cdl = new CountDownLatch(segments.size());
segments.stream().filter(Objects::nonNull).forEach((v) -> {
//开启子线程并发解析入库文件
new Thread(()->{
log.debug(Thread.currentThread().getName());
try{
//读取文件方法
List<List<Data>> list = readFile(v);
if (!FileUtils.isEmpty(list) && !FileUtils.isEmpty((Collection)list.get(0))) {
//插入数据方法
insertFileData(list);
}
}finally {
cdl.countDown();
}
}).start();
});
//等待子线程全部处理完成继续主线程
cdl.await();
} catch (Exception e) {
throw new Exception(e);
}
}