我正在尝试下面的代码。
{doj: {$lt:dt}}
有时会抛出ConcurrentModificationException并且有时会成功运行。
我不明白的是,因为有两种不同的方法,每种方法都包含一个线程。他们将逐一执行。当一个线程完成修改列表时,线程2将开始迭代。
我也提到了这个链接(Why no ConcurrentModificationException when one thread iterating (using Iterator) and other thread modifying same copy of non-thread-safe ArrayList),但情况不同。
那么,为什么会抛出这个例外?是因为线程吗?
有人可以解释一下吗?
答案 0 :(得分:0)
您正在启动两个线程,然后不再进一步同步。
有时,两个线程将同时运行,您将获得CME。其他时候,第一个线程将在第二个线程实际开始执行之前完成。在那种情况下,不会获得CME。
您获得变化的原因很可能是系统负载等问题。或者它可能只是由于线程调度程序是非确定性的。
与创建/启动线程的开销相比,您的线程实际上做了很少的工作。因此,其中一个人可以很快从其run()
方法返回就不足为奇了。