并发 - 推迟方法执行

时间:2014-05-29 22:46:32

标签: java concurrency

如何修改该类:

public class Event<T extends EventArgs> {
    private final List<Listener<T>> listeners;

    public Event() {
        listeners = new ArrayList<>();
    }

    public void invoke(T args) {
        for (Listener<T> l : listeners)
                    l.onEvent(args);
    }

    public void addEventListener(Listener<T> l) {
        listeners.add(l);
    }


    public void removeEventListener(Listener<T> l) {
        listeners.remove(l);
    }
}

addEventListener()removeEventListener()将在invoke()结束后被推迟执行(所以我不会ConcurrentModificationException)?

1 个答案:

答案 0 :(得分:0)

根据您期望invoke()运行的时间长短,您有两种选择。如果它的执行总是小于一个短的间隔(即10ms),那么你可以锁定该类。否则,您需要排队操作并让invoke方法在完成后按顺序运行它们。