optimize InstancesChangeNotifier. (#9416)

This commit is contained in:
Karson 2022-10-31 11:07:34 +08:00 committed by GitHub
parent 3ee357295b
commit 2596ff346c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -45,8 +45,6 @@ public class InstancesChangeNotifier extends Subscriber<InstancesChangeEvent> {
private final Map<String, ConcurrentHashSet<EventListener>> listenerMap = new ConcurrentHashMap<>(); private final Map<String, ConcurrentHashSet<EventListener>> listenerMap = new ConcurrentHashMap<>();
private final Object lock = new Object();
@JustForTest @JustForTest
public InstancesChangeNotifier() { public InstancesChangeNotifier() {
this.eventScope = UUID.randomUUID().toString(); this.eventScope = UUID.randomUUID().toString();
@ -66,16 +64,7 @@ public class InstancesChangeNotifier extends Subscriber<InstancesChangeEvent> {
*/ */
public void registerListener(String groupName, String serviceName, String clusters, EventListener listener) { public void registerListener(String groupName, String serviceName, String clusters, EventListener listener) {
String key = ServiceInfo.getKey(NamingUtils.getGroupedName(serviceName, groupName), clusters); String key = ServiceInfo.getKey(NamingUtils.getGroupedName(serviceName, groupName), clusters);
ConcurrentHashSet<EventListener> eventListeners = listenerMap.get(key); ConcurrentHashSet<EventListener> eventListeners = listenerMap.computeIfAbsent(key, keyInner -> new ConcurrentHashSet<>());
if (eventListeners == null) {
synchronized (lock) {
eventListeners = listenerMap.get(key);
if (eventListeners == null) {
eventListeners = new ConcurrentHashSet<>();
listenerMap.put(key, eventListeners);
}
}
}
eventListeners.add(listener); eventListeners.add(listener);
} }