[英]restrict removing of Elements while iterating
我有一個類,它具有一個靜態的偵聽器列表,如下所示:
public class StaticFoo{
public static interface ActionInterface{
void onAction();
}
private static ArrayList<ActionInterface> sList = new ArrayList();
public static ArrayList<ActionInterface> getList(){
return sList;
}
public static void addAction(ActionInterface action){
sList.add(action);
}
public static boolean removeAction(ActionInterface action){
return sList.remove(action);
}
}
我的問題現在是:如果我遍歷此列表並調用該接口的onAction
方法,如何防止那些偵聽器之一正在調用StaticFoo.removeAction(this)
,這將觸發ConcurrentModificationException
?
使用CopyOnWriteArrayList
而不是ArrayList
來保存偵聽器。
它避免了諸如get
和contains
類的只讀操作的並發瓶頸,但是它通過在變異操作中做很多工作並修改了可見性規則來做到這一點。 此外,變異操作會鎖定整個列表,因此是並發瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.