java – 为什么ArrayList在从多个线程修改时不会抛出ConcurrentM
|
ConcurrentModificationException:当不允许此类修改时,检测到并发修改对象的方法可能抛出此异常.
以上是来自javadoc的ConcurrentModificationException定义. 所以我尝试测试下面的代码: final List<String> tickets = new ArrayList<String>(100000);
for (int i = 0; i < 100000; i++) {
tickets.add("ticket NO," + i);
}
for (int i = 0; i < 10; i++) {
Thread salethread = new Thread() {
public void run() {
while (tickets.size() > 0) {
tickets.remove(0);
System.out.println(Thread.currentThread().getId()+"Remove 0");
}
}
};
salethread.start();
}
代码很简单. 解决方法
为了您的利益,我引用了
ArrayList Javadoc的大部分内容.将突出显示解释您所看到的行为的相关部分.
如果在通过迭代器访问列表时从结构上修改列表,ArrayLists通常会抛出并发修改异常(但即使这不是绝对的保证).请注意,在您的示例中,您将直接从列表中删除元素,并且您没有使用迭代器. 如果它引起你的兴趣,你也可以浏览 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
