目前就是一个虚基类的Service
有三种实现,类属性都是Autowire的
然后注入到Map中调用
这个Map有没有必要使用ConcurrentHashMap呢?
一般情况下Service都是单例的,应该没有因多线程产生的问题
但是刚看一个帖子的时候贴主用了ConcurrentHashMap也没说为啥
所以想请教一下
目前就是一个虚基类的Service
有三种实现,类属性都是Autowire的
然后注入到Map中调用
这个Map有没有必要使用ConcurrentHashMap呢?
一般情况下Service都是单例的,应该没有因多线程产生的问题
但是刚看一个帖子的时候贴主用了ConcurrentHashMap也没说为啥
所以想请教一下
一般情况下Service
线程安全的,并不是因为它是单例的,而是因为贫血模型中Service
基本上都是无状态的。
假设你是以下面的方式将 Service
注入到Map
的:
@Autowired
private Map<String,TypeInterface> services;
这个Map
是否需要ConcurrentHashMap
得看你怎么使用这个services
,假设你在Spring
初始化以后就不在更新services
中的内容只是从中获取service
,那么没必要使用ConcurrentHashMap
。反之如果你会在之后多线程更新这个Map
,那么就需要使用ConcurrentHashMap
。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Spring 项目中很多 bean 都设计成配置完成后线程安全的, 也是就是在 Spring 初始化阶段, 因为 Spring 本身是单线程初始化, 不会遇到问题, 初始化完成后, 不再修改, 属性只读, 也就不存在多线程修改造成竞态的问题. 你要确保在使用过程中不修改, 也就不需要 ConcurrentHashMap, 反过来说是要用的.