【发布时间】:2013-07-12 14:04:33
【问题描述】:
获取 java.util.Set 同步版本的最简单方法是使用 Collections.synchronizedSet(),如下所示:
Set mySyncSet = Collections.synchronizedSet(new HashSet());
Java API 谈到了这个新对象:
用户在迭代返回的集合时必须手动同步它
我的问题是,如果我使用这样的复制构造函数创建此 Set 的副本:
Set mySetCopy = new HashMap(mySyncSet);
它是线程安全的吗? (毕竟 HashMap 构造函数不是使用迭代来获取 Set 的成员吗?)还是应该像这样手动同步操作?:
Set mySetCopy;
synchronized(mySyncSet) {
mySetCopy = new HashMap(mySyncSet);
}
【问题讨论】:
-
Collections.synchronized*()几乎完全没用,不应该使用。 -
@SLaks 我不同意 Java 内置的同步集合完全没用。这仅取决于您需要(或喜欢)的粒度。
-
@RudolphEst:我想不出所提供的粒度正是您想要的任何操作。
标签: java