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<>();
// [...]
}
因此,可以安全地假设addListener
、removeListener
以及fire
的并发访问由EventListenerSupport
处理吗
共 (0) 个答案