持续更新中:
构造线程安全的Set类:
在DefaultSingletonBeanRegistry中的几个缓存:
/** Names of beans that are currently in creation */
private final Set<String> 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)的异常。