Java Collections.synchronizedCollection和Collections.synchronizedList或Collections.synchronizedSet之间有什么区别

Java Collections.synchronizedCollection和Collections.synchronizedList或Collections.synchronizedSet之间有什么区别,java,collections,Java,Collections,我们可以将Collections.synchronizedCollection(Collection c)用于集合类型的所有对象,如Set和List right,为什么我们有单独的方法,如-Collections.synchronizedList或Collections.synchronizedSet。除了列表和集合之外,还有其他接口是集合。您可以使用集合#synchronizedCollection对其进行同步 无论如何,如果您碰巧使用了同步集合,请查看包中的类。其中一些是(用于列表)和(用于

我们可以将Collections.synchronizedCollection(Collection c)用于集合类型的所有对象,如Set和List right,为什么我们有单独的方法,如-Collections.synchronizedList或Collections.synchronizedSet。

除了
列表
集合
之外,还有其他接口是
集合
。您可以使用
集合#synchronizedCollection
对其进行同步


无论如何,如果您碰巧使用了同步集合,请查看包中的类。其中一些是(用于
列表
)和(用于
设置
)。

如果调用
集合。在
列表
上同步的集合
,则无法对返回的
集合
使用
列表
方法。在另一个方向上,你不能调用
集合.synchronizedList
,它可能是一个任意的
集合
,包括一个
集合

是的,它抛出ClassCastException,我查看了Collections类的源代码,方法Collections.synchronizedCollection(c)仅返回集合类型的包装器同步方法,其中作为集合。synchronizedList(list)方法具有列表中所有方法的包装器同步方法,对于集合也是如此

因此,对于特定的输入类型,必须在集合中使用特定的同步方法


谢谢您的帮助。

您想使用
集合
列表
还是
集合
?这就是为什么您有这三个集合。但是我们仍然可以将集合强制转换为List或Set,然后我们可以使用特定于List或Set的方法,对吗?如果您将Collections.synchronizedCollection()返回的集合强制转换为List或Set,您将得到ClassCastException。返回的对象是原始集合的包装器。这不是原来的那个。对于synchronizedCollection(),它只实现收集,而不实现列表或集合。查看源代码以了解其工作原理。