在 spring getbean() 的时候,如果是 singleton 的话, bean实例化后 会保存在 一个 ConcurrentHashMap 中, 我的问题是为什么要用 ConcurrentHashMap? 我觉得 HashMap 也可以啊。目前我自己要实现一个 简易的 bean 池, 里面的 bean 不要求线程安全,那么是不是可以直接用 HashMap 了? 期待牛人的解答
这跟spring加载配置文件解析配置文件的内部机制相关,
它为了保证在多线程情况下线程安全性
同Hashtable,synchronizedMap一样都是线程安全的HashMap实现。不过比这两者具有更高程度的并发性而已。
如果你都不要求线程安全的话,hashmap就足够了
[quote]哦,谢谢哥们这么晚了还回答我的问题。可能我没表述清楚,我的最根本的意思是为啥要让Map 里的bean 同步? 我从Map中异步取出来的bean 不是一样的么?只不过会导致这个 bean 也有可能异步而已啊。实例应该都是同一个bean吧?[/quote]
不知道解释对不对,因为一个javabean对象不是一个原子性的对象。他内部的属性可以不断产生变化。假如你通过singleton模式拿到一个类实例,我们仍然可以通其本身暴露在外的某些方法改变其内部属性。所以需要通过线程安全来保证该类实例内部属性针对同一个线程也是不会不变的。