如何修改该类:
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
)?
答案 0 :(得分:0)
根据您期望invoke()
运行的时间长短,您有两种选择。如果它的执行总是小于一个短的间隔(即10ms),那么你可以锁定该类。否则,您需要排队操作并让invoke方法在完成后按顺序运行它们。