如何避免ConcurrentModificationException

Bru*_*ões 7 java collections concurrency

每当我们使用java.util Collection类时,我们就知道如果一个线程更改了一个集合,而另一个线程使用迭代器遍历它,那么任何调用iterator.hasNext()iterator.next()将抛出ConcurrentModificationException.即使是synchronized集合包装类SynchronizedMapSynchronizedList仅有条件线程安全的,这意味着所有的个别操作都是线程安全的,但复合操作,其中的控制流取决于前面操作的结果可能会受到线程问题.问题是:如何在不影响性能的情况下避免此问题.注意:我知道CopyOnWriteArrayList.

Ada*_*old 2

您可以使用上面提到的CopyOnWriteArrayListConcurrentHashMap,也可以使用Atomic*与 CAS 一起使用的类。

如果您不知道Atomic*课程,那么它们绝对值得一看!你可以看看这个问题。

因此,要回答您的问题,您必须为任务选择正确的工具。由于您不与我们分享上下文,我只能猜测。在某些情况下,CAS 的性能会比并发集合的性能更好。

如果有不清楚的地方,您可以随时查看官方的 Oracle Trails:课程:并发