Большинство людей используют ConcurrentLinkedQueue или CopyOnWriteArrayList для сбора слушателей и уведомления их, когда что-то происходит. Недостатком этого является то, что возможно, что слушатель может получить уведомление, когда он уже сам не зарегистрирован. Это происходит, если менеджер (collection, ..., присваивает ему имя) перебирает коллекцию слушателей, а какой-то слушатель отменяет регистрацию во время этой итерации.
Итак, контракт на удаление слушателя нарушен. Считаете ли вы это проблемой?