public void saveByThreadPool() {
//获取千万级数据
List<Data> datas = Repository.query();
if (datas == null || datas.size() == 0) {
log.info("目前没有需要处理的数据");
return;
}
ExecutorService pool = Executors.newFixedThreadPool(20);
//允许线程数
final Semaphore semp = new Semaphore(20);
for (int i = 0; i < datas.size(); i++) {
Data data = datas.get(i);
pool.execute(new Runnable() {
@Override
public void run() {
//记录异常信息
List<String> err = new Vector<>();
try {
semp.acquire();
savePic(data);
} catch (Exception e) {
//记录错误信息
synchronized (err) {
err.add(e.getMessage());
}
log.error("方法异常:e={}", e);
} finally {
//访问完后释放
semp.release();
}
}
});
}
pool.shutdown();
//pool 没有跑完就休眠
while (!pool.isTerminated()) {
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}