大多数人使用ConcurrentLinkedQueue或CopyOnWriteArrayList来收集侦听器,并在发生事件时通知他们。这样做的缺点是,监听器可能会在已经取消注册的情况下获得通知。如果管理器(集合,......,给它一个名字)迭代监听器集合并且某些监听器在该迭代期间取消注册,则会发生这种情况。
因此,'删除侦听器'合同被破坏了。你认为这是一个问题吗?
答案 0 :(得分:4)
即使您检查了侦听器仍然已注册,但在多线程环境中,您仍然无法确定在您调用它时它是否仍然已注册。即使对于非多线程情况,标准实现也是在处理副本。