【问题标题】:Concurrency - postpone method execution [duplicate]并发 - 推迟方法执行
【发布时间】:2014-07-19 14:27:37
【问题描述】:

如何修改该类:

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)?

【问题讨论】:

    标签: java concurrency


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多