请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

线程池中线程有阻塞,但一直在运行,请问是啥问题

@Override
public void autoInfo(int shardingTotalCount, int shardingItem) {
// 阻塞队列容量声明为100个
ThreadPoolExecutor executorServices = new ThreadPoolExecutor(10, 12,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(200));

    // 设置拒绝策略
    executorServices.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

    Map<String, Object> queryMap = new HashMap<String, Object>();
    queryMap.put("shardingItem", shardingItem);
    queryMap.put("shardingTotalCount", shardingTotalCount);

    List<PreferProductPricePo> pricePos = preferProductPriceMapper.selectInfobyCustNumber(queryMap);
    try {

        for (int i = 0; i < pricePos.size(); i++) {
                final String number = pricePos.get(i).getCustNumber();
                executorServices.execute(() -> {
                    //System.out.println(Thread.currentThread().getName() + "-结果:" + number);
                    PreferProductPricePo preferProductPricePo = new PreferProductPricePo();
                    preferProductPricePo.setCustNumber(number);
                    List<PrefetProductPriceSenderInfoPo> prefetProductPriceSenderInfos = preferProductPriceMapper.selectInfobyCustNumberList(preferProductPricePo);
                    for (PrefetProductPriceSenderInfoPo productPriceSenderInfoPo : prefetProductPriceSenderInfos) {
                        System.out.println(number);
                        String custNumber = productPriceSenderInfoPo.getCustNumber();
                        String id = productPriceSenderInfoPo.getId().toString();
                        //cmcDiscountProducer.send(custNumber + id, JSONObject.toJSONString(productPriceSenderInfoPo));
                    }
                });
        }
    } catch (Exception e){
        e.printStackTrace();
    }finally {
        executorServices.shutdown();
    }
    System.out.println("线程执行结束");

}

正在回答 回答被采纳积分+3

1回答

悟空 2021-06-11 00:15:42

你说一直在运行是什么意思?如果线程池里的任务都完成了,线程池才能正常关闭。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕仰1794849 #1
    就是一直在跑任务,都是相隔差不多一分钟跑点任务出来,请问是啥问题?这个代码有啥问题不
    回复 有任何疑惑可以回复我~ 2021-06-11 06:42:13
  • 悟空 回复 提问者 慕仰1794849 #2
    一直跑任务这没啥问题吧,这和业务逻辑有关。
    回复 有任何疑惑可以回复我~ 2021-06-11 10:46:32
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号