我们可以将Collections.synchronizedCollection(Collection c)用于Collection类型的所有对象,例如Set和List right,为什么我们有单独的方法,如Collections.synchronizedList或Collections.synchronizedSet。
答案 0 :(得分:1)
除了Collection
和List
之外,还有Set
个其他界面,例如Deque
。您可以使用Collections#synchronizedCollection
同步它。
无论如何,如果您碰巧使用同步集合,请查看java.util.concurrent
包中的类。其中一些是CopyOnWriteArrayList
(适用于List
)和CopyOnWriteArraySet
(适用于Set
)。
答案 1 :(得分:1)
如果您在Collections.synchronizedCollection
上致电List
,则无法在返回的List
上使用Collection
方法。另一方面,您无法就可能是Collections.synchronizedList
的任意内容致电Collection
,包括Set
。
答案 2 :(得分:0)
是的,抛出ClassCastException,我查看了Collections类的源代码,方法Collections.synchronizedCollection(c)只返回包含类型的包装器同步方法,其中Collections.synchronizedList(list)方法有包装器List的所有方法的同步方法,类似于Set也。
因此必须在集合中使用特定输入类型的特定同步方法。
感谢您的帮助。