我们可以对像Set和List right这样的集合类型的所有对象使用Collections.synchronizedCollection(集合c),这就是为什么我们有像- Collections.synchronizedList或Collections.synchronizedSet这样的单独方法。
发布于 2014-02-14 06:51:47
除了List和Set之外,还有其他的Collection接口,例如Deque。您可以使用Collections#synchronizedCollection进行同步。
无论如何,如果您碰巧使用同步集合,请查看java.util.concurrent包中的类。其中一些是CopyOnWriteArrayList (用于List)和CopyOnWriteArraySet (用于Set)。
发布于 2014-02-14 06:52:19
如果对List调用Collections.synchronizedCollection,则不能对返回的Collection使用List方法。另一方面,您不能对可能是任意Collection的东西调用Collections.synchronizedList,包括Set。
发布于 2014-02-15 03:58:00
是的,它抛出了ClassCastException,我查看了Collections类的源代码,方法Collections.synchronizedCollection(c)只返回集合类型的包装器同步方法,而Collections.synchronizedList( List )方法具有列表中所有方法的包装器同步方法,Set也是类似的。
因此,对于特定的输入类型,必须在集合中使用特定的同步方法。
谢谢你的帮助。
https://stackoverflow.com/questions/21767251
复制相似问题