线程池中线程有阻塞,但一直在运行,请问是啥问题
来源:5-16 插队演示2

慕仰1794849
2021-06-10
@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("线程执行结束");
}
写回答
1回答
-
悟空
2021-06-11
你说一直在运行是什么意思?如果线程池里的任务都完成了,线程池才能正常关闭。
022021-06-11
相似问题