weixin_38647584 2022-12-22 17:25 采纳率: 69.2%
浏览 22
已结题

使用线程池,任务量5万只跑了几十条便停止的问题

需要传递数据给其他企业,由于数据量较大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个子线程执行的,后面就没有了

img

尝试解决了,但是没有效果,该代码在当前项目其他地方也有使用,目前没有发现这种问题,但是在这就出问题了,不知道是什么原因,目前猜测是否传输数据网络不好阻塞了导致终止了?或者和本机运行内存有关?希望的得到大家得帮助,谢谢
  • 写回答

1条回答 默认 最新

  • cs_ym7354682443 2022-12-23 14:57
    关注

    线程池使用完,需要调用shutdown方法
    https://zhuanlan.zhihu.com/p/509882844

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月16日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?