Я использовал разные виды слушателей на протяжении многих лет.Недавно прочитал главу о параллелизме в Effective Java Джоша Блоха, где он рассказывает о синхронизации добавления и удаления слушателей, но рекомендует вместо этого использовать CopyOnWriteArrayList / Set.
Недавно яИспользуются уведомления JMX MBean.JMX предоставляет базовый класс, который вы можете расширить, NotificationBroadcasterSupport , который предоставляет соответствующие методы для вас: addNotificationListener, removeNotificationListener, sendNotification.В дополнение к конструктору по умолчанию, существует конструктор Exexutor, который предоставляет простой способ сделать уведомления слушателей асинхронными.И, по-видимому, этот класс внутренне использует что-то вроде CopyOnWriteArrayList, чтобы избежать проблем с синхронизацией (например, если слушатели пытаются удалить себя из списка как часть своего метода handleNotification).
Это заставляет меня задуматься, существуют ли какие-либо общие утилитыдля этого.Если мне нужен механизм для регистрации и уведомления слушателей (который не включает в себя JMX), вместо того, чтобы прокручивать мой собственный, используя CopyOnWriteArrayList и, возможно, Executors и тому подобное, было бы хорошо, если бы была упакованная, протестированная утилита.Существует ли что-то подобное в JDK или в общих библиотеках, таких как Google?