目前就是一个虚基类的Service有三种实现,类属性都是Autowire的然后注入到Map中调用这个Map有没有必要使用ConcurrentHashMap呢?一般情况下Service都是单例的,应该没有因多线程产生的问题但是刚看一个帖子的时候贴主用了ConcurrentHashMap也没说为啥所以想请教一下
3 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
Spring 项目中很多 bean 都设计成配置完成后线程安全的, 也是就是在 Spring 初始化阶段, 因为 Spring 本身是单线程初始化, 不会遇到问题, 初始化完成后, 不再修改, 属性只读, 也就不存在多线程修改造成竞态的问题. 你要确保在使用过程中不修改, 也就不需要 ConcurrentHashMap, 反过来说是要用的.
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
一般情况下Service
线程安全的,并不是因为它是单例的,而是因为贫血模型中Service
基本上都是无状态的。
假设你是以下面的方式将 Service
注入到Map
的:
@Autowired
private Map<String,TypeInterface> services;
这个Map
是否需要ConcurrentHashMap
得看你怎么使用这个services
,假设你在Spring
初始化以后就不在更新services
中的内容只是从中获取service
,那么没必要使用ConcurrentHashMap
。反之如果你会在之后多线程更新这个Map
,那么就需要使用ConcurrentHashMap
。
添加回答
举报
0/150
提交
取消