我使用了同步列表,我仍然得到 ConcurrentModificationException

2022-09-03 15:05:54

我正在使用而不是使列表在多线程环境中安全。但是当我尝试在迭代时向中添加项目时,我会不断得到它。这是为什么,我该如何防止?VectorArrayListConcurrentModificationExceptionVector


答案 1

在迭代矢量时,不能对其进行修改。将要添加的项目存储在单独的矢量中,并在循环完成后将它们移动到 Vector 或循环原始 Vector 的副本上。

已添加:要在java中获取Vector周围的互斥体,请在两个函数中执行此操作:

synchronized (list) {
  // modifying list
}

和:

synchronized (list) {
  // iterating over list
}

当然,我假设该列表已命名list


答案 2

如果要在迭代时添加项目,则需要使用 ListIterator。通过使用 ,您不会绕过此规则(显然),因此我建议改用 。VectorArrayList