为了账号安全,请及时绑定邮箱和手机立即绑定

利用SpringIOC实现策略模式有必要使用ConcurrentHashMap吗

利用SpringIOC实现策略模式有必要使用ConcurrentHashMap吗

有只小跳蛙 2019-01-17 02:24:38
目前就是一个虚基类的Service有三种实现,类属性都是Autowire的然后注入到Map中调用这个Map有没有必要使用ConcurrentHashMap呢?一般情况下Service都是单例的,应该没有因多线程产生的问题但是刚看一个帖子的时候贴主用了ConcurrentHashMap也没说为啥所以想请教一下
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

Spring 项目中很多 bean 都设计成配置完成后线程安全的, 也是就是在 Spring 初始化阶段, 因为 Spring 本身是单线程初始化, 不会遇到问题, 初始化完成后, 不再修改, 属性只读, 也就不存在多线程修改造成竞态的问题. 你要确保在使用过程中不修改, 也就不需要 ConcurrentHashMap, 反过来说是要用的.

查看完整回答
反对 回复 2019-03-01
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

一般情况下Service线程安全的,并不是因为它是单例的,而是因为贫血模型中Service基本上都是无状态的。
假设你是以下面的方式将 Service注入到Map的:

@Autowired
private Map<String,TypeInterface> services;

这个Map是否需要ConcurrentHashMap得看你怎么使用这个services,假设你在Spring初始化以后就不在更新services中的内容只是从中获取service,那么没必要使用ConcurrentHashMap。反之如果你会在之后多线程更新这个Map,那么就需要使用ConcurrentHashMap

查看完整回答
反对 回复 2019-03-01
?
holdtom

TA贡献1805条经验 获得超10个赞

线程安全是相对的,Bean 是单例不假,但是你并不能控制调用单例里面的方法时候的线程情况,就像同时要修改一个实例里面的相同属性一样。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信