簡體   English   中英

限制在迭代時刪除Elements

[英]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來保存偵聽器。

它避免了諸如getcontains類的只讀操作的並發瓶頸,但是它通過在變異操作中做很多工作並修改了可見性規則來做到這一點。 此外,變異操作會鎖定整個列表,因此是並發瓶頸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM