如何解决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<>();
// [...]
}
因此假设对 addListener
、removeListener
以及 fire
的并发访问由 EventListenerSupport
处理是否安全?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。