我在看这段代码。此构造委托给本地方法“System.arraycopy”爪哇 - ArrayList的构造函数的线程安全
难道是线程安全的?我的意思是它可以抛出一个ConcurrentModificationException?
public Collection<Object> getConnections(Collection<Object> someCollection) {
return new ArrayList<Object>(someCollection);
}
如果要复制的集合是ThreadSafe,例如CopyOnWriteArrayList,它会产生任何区别吗?
public Collection<Object> getConnections(CopyOnWriteArrayList<Object> someCollection) {
return new ArrayList<Object>(someCollection);
}
编辑: 我知道的是ThreadSafe = ConcurrentModificationException的!我试图在某个时间点对数据进行快照。因此,如果另一个线程通过拷贝中途写入someCollection,我不在乎结果是否有新对象。我只是不希望它抛出ConcurrentModificationException或者更糟
这不是一个理论问题:不可预知的行为将会发生。唯一的不确定性是*它会发生的频率。 – 2010-04-21 10:25:05
@Stephen:你说得对,但是复制无序写错误是非常困难的。我在以下文章中只找到一个示例:http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html – 2010-04-21 11:22:40
难以重现!=理论。此外,网页中描述的几个例子!=理论。 :-) – 2010-04-21 11:41:12