哪个线程将使用两个线程获得concurrentModificationException

时间:2017-08-15 05:06:07

标签: java concurrency

我有两个线程,一个线程正在添加,在ArrayList中删除 另一个线程迭代迭代器ArrayList。哪个线程将获得ConcurrentModificationException;

2 个答案:

答案 0 :(得分:4)

带有迭代器的线程。它是迭代器,用于检测(尽最大努力)底层集合已更改,并抛出异常。

当然ConcurrentModificationException最常见的情况是使用单个线程来迭代集合并尝试修改它:

List<String> foo = ... ;
for(String s : foo) {  // Exception will be thrown here after 1st iteration
    foo.add("Let's throw an exception!");
}

答案 1 :(得分:1)

无法确定。这来自documentation

  

请注意,无法保证快速失败的行为,因为一般来说,在存在不同步的并发修改时,无法做出任何硬性保证。失败快速操作会尽最大努力抛出ConcurrentModificationException。因此,编写依赖于此异常的程序以确保其正确性是错误的:ConcurrentModificationException仅应用于检测错误