public void pushCarInfoData() {
// 获取CPU核数
int coresNumber = Runtime.getRuntime().availableProcessors();
System.out.println("获取CPU核数:" + coresNumber);
//创建线程池
ThreadPoolExecutor executor = new ThreadPoolExecutor(coresNumber, coresNumber + 2, 1000, TimeUnit.MINUTES, new LinkedBlockingDeque<>());
CarInfoVO carInfoVO = new CarInfoVO();
carInfoVO.setOperator("2000");
List carInfoDTOList = carInfoMapper.selectUnsentCarInfo(carInfoVO); //此处查询出数据大约5万多条
System.out.println("开始执行");
for (CarInfoDTO carInfoDTO : carInfoDTOList) { //循环5w多条也没问题
executor.execute(new Runnable() {
@Override
public void run() {
try {
if (checkProperty(carInfoDTO)) {
if ("1000".equals(carInfoDTO.getOperator())) {
// 发送电信
carInfoHttp.sendCarInfoToTelecom(carInfoDTO);
} else if ("2000".equals(carInfoDTO.getOperator())) {
// 发送移动
carInfoHttp.sendCarInfoToMobile(carInfoDTO);
} else if ("3000".equals(carInfoDTO.getOperator())) {
// 发送联通
carInfoHttp.sendCarInfoToUnicom(carInfoDTO);
}
}
} catch (Exception e) {
logger.error("循环开启线多线程报错:" + e);
}
}
});
}
System.out.println("====== 线程结束 =====");
}
线程池使用完,需要调用shutdown方法
https://zhuanlan.zhihu.com/p/509882844