Spring源码中学到的用法

持续更新中:

构造线程安全的Set类:

在DefaultSingletonBeanRegistry中的几个缓存:

/** Names of beans that are currently in creation */
private final Set singletonsCurrentlyInCreation =
            Collections.newSetFromMap(new ConcurrentHashMap<>(16));

关于构造线程安全的Set的类的方式,Stack Overflow有几个问题专门进行了讨论:
Collections.newSetFromMap(ConcurrentHashMap) vs. Collections.synchronizedSet(HashSet)
总的来讲,采用Spring这种Collections.newSetFromMap(ConcurrentHashMap)的方式更加方便一些,因为支持并发的读和更新,而如果采用Collections.syncrhonizedSet(HashSet)的方式的话,则在迭代的进行读取的时候,会发生CME(ConcurrentModicationException)的异常。

你可能感兴趣的:(Spring源码中学到的用法)