Apache EventListenerSupport 线程安全吗? 总结问题

问题描述

总结

org.apache.commons.lang3.event.EventListenerSupport 用于在某个类执行某个操作并希望将其通知所有侦听器时触发。

然而,这个类被多个线程访问,并且已经被强制在它处理的其他列表上同步,因此避免了 ConcurrentModificationException

不同的线程负责添加删除和触发事件。用于此目的的函数如下所示:

    public void addListener( MyListener listener )
    {
        myEventSupport.addListener( listener );
    }


    public void removeListener( MyListener listener )
    {
        myEventSupport.removeListener( listener );
    }
    

    public void someEvent()
    {
        // do other stuff
        myEventSupport.fire().updateIssued();
    }

因为我已经遇到了类的并发问题,所以我预计同时访问 EventListenerSupport myEventSupport。这是读取和写入权限。

问题

我在 Apache 文档中找不到任何关于同步和线程安全的信息:https://commons.apache.org/proper/commons-lang/javadocs/api-3.8/org/apache/commons/lang3/event/EventListenerSupport.html

但是我确实在 .class 文件本身的描述中找到了这条评论

public class EventListenerSupport<L> implements Serializable {

    // [...]

    /**
     * The list used to hold the registered listeners. This list is
     * intentionally a thread-safe copy-on-write-array so that traversals over
     * the list of listeners will be atomic.
     */
    private List<L> listeners = new copyOnWriteArrayList<>();

    // [...]
}

因此假设对 addListenerremoveListener 以及 fire 的并发访问由 EventListenerSupport 处理是否安全?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)