【发布时间】:2011-03-12 05:21:51
【问题描述】:
我有以下代码:
private String toString(List<DrugStrength> aDrugStrengthList) {
StringBuilder str = new StringBuilder();
for (DrugStrength aDrugStrength : aDrugStrengthList) {
if (!aDrugStrength.isValidDrugDescription()) {
aDrugStrengthList.remove(aDrugStrength);
}
}
str.append(aDrugStrengthList);
if (str.indexOf("]") != -1) {
str.insert(str.lastIndexOf("]"), "\n " );
}
return str.toString();
}
当我尝试运行它时,我得到ConcurrentModificationException,任何人都可以解释它为什么会发生,即使代码在同一个线程中运行?我该如何避免呢?
【问题讨论】:
-
对这个异常的解释是ArrayList的迭代器是一个fail-fast迭代器;即,当它检测到其集合同时已被修改时,它将失败(抛出异常)。与不抛出并发修改异常的故障安全迭代器相比(例如,在集合 ConcurrentHashMap 和 CopyOnWriteArrayList 上)
标签: java collections concurrency