HashMap有可能达到线程安全?
问题产生
1.我们都知道hashMap在多线程环境下不是线程安全的,但却不知道原因
2.我们知道spring注解注入中有单例和多例,并且我们知道多线程中的多例实际上相当于单线程
Q:那么问题来了,多线程环境中的多例中的hashMap能否认为是线程安全的呢?(当然我们可以使用ConcurrentHashMap来避免想这个问题)
要解决这个思考,得到一个确定的答案,只能溯其根源,就是看一下hashMap线程不安全的原因。
首先是spring的单例和多例的分析
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)
singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。Spring bean 默认是单例模式,但是可以通过在类上添加@Scope("prototype")
ps:值得注意的是@Scope注解支持多种配置(于之前在springMVC的xml中配置的类似)
{
singleton 单实例的(单例)(默认) ----全局有且仅有一个实例
prototype 多实例的(多例) ---- 每次获取Bean的时候会有一个新的实例
reqeust 同一次请求 ----request:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session 同一个会话级别 ---- session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
}
然后是hashMap源码的分析