Tôi có đoạn mã sau:ConcurrentModificationException cho ArrayList
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();
}
Khi tôi cố gắng chạy nó, tôi nhận được ConcurrentModificationException
, bất cứ ai có thể giải thích lý do tại sao nó xảy ra, ngay cả khi đang chạy trong cùng một chủ đề? Và làm thế nào tôi có thể tránh nó?
[Bạn nên ngừng lo lắng và tình yêu giá trị nhân bản.] (Http://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how- i-learning-to-stop-lo lắng-và-tình yêu-trùng lặp /). – Will
Giải thích về ngoại lệ này là trình lặp của ArrayList là một trình lặp không nhanh; tức là nó sẽ thất bại (ném ngoại lệ) khi nó phát hiện rằng bộ sưu tập của nó trong thời gian trung bình đã được sửa đổi. So với các trình lặp không an toàn không loại trừ các ngoại lệ sửa đổi đồng thời (ví dụ: trên các bộ sưu tập ConcurrentHashMap và CopyOnWriteArrayList) –