获取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);
}