微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。