请问spring源码getSingleton中对ConcurrentHashMap加独占锁的意义是什么?

新手上路,请多包涵
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
        Object singletonObject = this.singletonObjects.get(beanName);
        if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
            synchronized (this.singletonObjects) {
                singletonObject = this.earlySingletonObjects.get(beanName);

这里singletonObjects已经是线程安全的Map集合了,再对其加synchronized的意义何在,希望有大神可以详细讲解

阅读 4.6k
2 个回答

这不就是个单例模式嘛...和ConcurrentHashMap有什么关系

避免singletonObject多次生成,而不是控制对ConcurrentHashMap的操作,是控制对singletonFactory.getObject()的操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题