为什么会有ConcurrentHashMap在@PostConstruct标注方法里缓存信息的应用场景

biaozhun90 2019-08-12 03:22:54
比如秒杀网关业务场景
@Component
public class SecKillProductConfig implements InitializingBean {

private static final Map<String, SecKillProductDobj> PRODUCT_CONFIG_MAP =
new ConcurrentHashMap<>(16);

@PostConstruct
public void init() {
List<SecKillProductDobj> killProductList = secKillProductService.querySecKillProductList();
if (killProductList == null) {
throw new RuntimeException("请确保数据库中存在秒杀商品配置!");
}
killProductList.stream().forEach((secKillProductDobj -> {
String prodId = secKillProductDobj.getProdId();
PRODUCT_CONFIG_MAP.put(prodId, secKillProductDobj);
}));
LOGGER.info("[SecKillProductConfig]初始化秒杀配置完成,商品信息=[{}]", JSON.toJSONString(PRODUCT_CONFIG_MAP));
}

这里的ConcurrentHashMap能不能换成HashMap?
...全文
184 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
北飞的企鹅 2019-08-22
  • 打赏
  • 举报
回复
肯定不能换啊 秒杀商品是缓存在map里面的 如果后续的业务涉及到这个map的话 肯定要用ConcurrentHashMap
biaozhun90 2019-08-13
  • 打赏
  • 举报
回复
这个缓存不是在容器启动时就加载了么,后面并不会并发执行的机会啊
oh_Maxy 2019-08-12
  • 打赏
  • 举报
回复
秒杀意味着存在并发。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧