【发布时间】:2016-06-20 06:47:01
【问题描述】:
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();
}
代码很简单。 10 个线程从 arraylist 对象中删除元素。 可以确定多个线程访问一个对象。但它运行正常。不会抛出异常。 为什么?
【问题讨论】:
标签: java multithreading arraylist thread-safety