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源码的分析

 

posted @ 2022-10-26 12:13  佩洛君  阅读(67)  评论(0编辑  收藏  举报