想象一个同步集合:Sets=Collections.synchronizedSet(newHashSet())克隆此集合的最佳方法是什么?最好克隆不需要对原始集合进行任何同步,但要求对克隆集合进行迭代不需要对原始集合进行任何同步。 最佳答案 在同步块(synchronizedblock)中使用复制构造函数:synchronized(s){SetnewSet=newHashSet(s);//preferablyusegenerics}如果您还需要同步副本,请再次使用Collections.synchronizedSet(..)。根据P
显然,有两种方法可以获得thread-safeHashSet使用Java的Collections的实例实用类。Collections.newSetFromMap(ConcurrentHashMap)Collections.synchronizedSet(HashSet)我问:它们有何不同?在什么情况下,哪个优先于另一个? 最佳答案 你可能想到的是Setset=Collections.newSetFromMap(newConcurrentHashMap());这支持并发更新和读取。它的迭代器不会抛出ConcurrentModicati
我们知道,默认情况下迭代并发集合不是线程安全的,所以不能使用:Setset=Collections.synchronizedSet(newHashSet());//fillwithdatafor(Ee:set){process(e);}这是因为在迭代过程中可能会添加数据,因为set上没有排他锁。这在javadoc中有描述Collections.synchronizedSet:publicstaticSetsynchronizedSet(Sets)Returnsasynchronized(thread-safe)setbackedbythespecifiedset.Inordertogu