删除侦听器时,是否可以再次在该侦听器上调用该事件?

时间:2011-11-24 16:40:53

标签: java listener

大多数人使用ConcurrentLinkedQueue或CopyOnWriteArrayList来收集侦听器,并在发生事件时通知他们。这样做的缺点是,监听器可能会在已经取消注册的情况下获得通知。如果管理器(集合,......,给它一个名字)迭代监听器集合并且某些监听器在该迭代期间取消注册,则会发生这种情况。

因此,'删除侦听器'合同被破坏了。你认为这是一个问题吗?

1 个答案:

答案 0 :(得分:4)

即使您检查了侦听器仍然已注册,但在多线程环境中,您仍然无法确定在您调用它时它是否仍然已注册。即使对于非多线程情况,标准实现也是在处理副本。