3 回答
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
異步任務(wù)代碼沒(méi)有問(wèn)題。對(duì)“主”線程代碼執(zhí)行此操作:
synchronized (themeCacheList) {
Iterator<ThemeCacheIndex> it = themeCacheList.iterator();
while (it.hasNext()) {
ThemeCacheIndex themeCacheIndex = it.next();
doSomething();
}
}
如您所見(jiàn),我已經(jīng)刪除了,因?yàn)樗嵌嘤嗟?,我直接?上同步。Collections.synchronizedListthemeCacheList
TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
不確定我有一個(gè)好的解決方案,但我想這2個(gè)例子顯示了問(wèn)題和可能的解決方案?!翱赡艿闹貜?fù)”答案沒(méi)有顯示任何解決方案,而只是解釋了問(wèn)題所在。
@Test
public void testFails(){
List<String> arr = new ArrayList<String>();
arr.add("I");
arr.add("hate");
arr.add("the");
arr.add("ConcurrentModificationException !");
Iterator i = arr.iterator();
arr.remove(2);
while(i.hasNext()){
System.out.println(i.next());
}
}
@Test
public void testWorks(){
List<String> arr = new CopyOnWriteArrayList<>();
arr.add("I");
arr.add("hate");
arr.add("the");
arr.add("ConcurrentModificationException !");
Iterator i = arr.iterator();
arr.remove(2);
while(i.hasNext()){
System.out.println(i.next());
}
}
添加回答
舉報(bào)
