java - 如何克隆同步集合?

标签 java collections synchronized

想象一个同步集合:

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/

相关文章:

java - ThreadPoolExecutor javadoc,排队和锁定的三种策略

java - 使用java流从集合集合中删除一些值

java - Java 中的 IEqualityComparer 接口(interface)

java - 2 个线程中 wait() 和 notifyall() 调用期间的非 volatile 变量值

java - 解释synchronized()内部的Commons Lang代码?

java - IBM WebSphere 8.5 中的 LogBack 作为 SharedLibrary

java - 打印最大重复值

java - 套接字无法在网络中工作

java - 如何在全局声明HashMap并仅在第一次向其中添加值?

java - 从基于 Swing 的应用程序中的线程(ETC 除外)接收更新