有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是Apache EventListener支持线程安全的吗?

摘要

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处理吗


共 (0) 个答案