需要传递数据给其他企业,由于数据量较大10万条数据,考虑到使用线程池,设置了线程池的核心参数,核心线程8,最大10条,
出现的问题早上执行10w条的时候传递到了5万条不知什么原因终止了,程序没有报错,下午再次调用执行的时候出现问题,每次调用方法只执行了几十次,且每次执行次数都不相同
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<CarInfoDTO> 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("====== 线程结束 =====");
}
控制台也没有报错,这是最后一次执行控制台输出的内容,是第8个子线程执行的,后面就没有了
尝试解决了,但是没有效果,该代码在当前项目其他地方也有使用,目前没有发现这种问题,但是在这就出问题了,不知道是什么原因,目前猜测是否传输数据网络不好阻塞了导致终止了?或者和本机运行内存有关?希望的得到大家得帮助,谢谢