public static void register(Class<? extends Event> eventClass, Subscriber subscriber) {
CopyOnWriteArraySet<Subscriber> set = SUBSCRIBER_MAP.get(eventClass);
if (set == null) {
set = new CopyOnWriteArraySet<Subscriber>();
// 这里有点意思,判断了两次是不是 null,这样能够线程安全吗?
CopyOnWriteArraySet<Subscriber> old = SUBSCRIBER_MAP.putIfAbsent(eventClass, set);
if (old != null) {
set = old;
}
}
set.add(subscriber);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Register subscriber: {} of event: {}.", subscriber, eventClass);
}
}
两次判断 null,是不是从线程安全的角度考虑的