想象一个同步的 Collection
:
Set s = Collections.synchronizedSet(new HashSet())
克隆此Collection的最佳方法是什么?
最好是克隆不需要在原始Collection上进行任何同步,而是要求对克隆的Collection进行迭代不需要在原始Collection上进行任何同步。
在同步块内使用复制构造函数:
synchronized (s) {
Set newSet = new HashSet(s); //preferably use generics
}
如果您还需要同步副本,请再次使用Collections.synchronizedSet(..)
。
根据Peter的评论-您需要在原始集合的同步块中执行此操作。的文档synchronizedSet
对此是明确的:
当用户遍历返回的集合时,必须手动对其进行同步
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句