想象一个同步集合
:
Set s = Collections.synchronizedSet(new HashSet())
克隆此集合的最佳方法是什么?
最好克隆不需要对原始集合进行任何同步,但要求对克隆集合进行迭代不需要对原始集合进行任何同步。
最佳答案
在同步块(synchronized block)中使用复制构造函数:
synchronized (s) {
Set newSet = new HashSet(s); //preferably use generics
}
如果您还需要同步副本,请再次使用 Collections.synchronizedSet(..)
。
根据 Peter 的评论 - 您需要在原始集的同步块(synchronized block)中执行此操作。 synchronizedSet
的文档对此很明确:
It is imperative that the user manually synchronize on the returned set when iterating over it
关于java - 如何克隆同步集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584635/