Merge pull request #3214 from dotnet-maestro-bot/merge/release/2.2-to-master

[automated] Merge branch 'release/2.2' => 'master'
This commit is contained in:
Mikael Mengistu 2018-10-26 13:55:51 -07:00 committed by GitHub
commit 86f4e80ecf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 29 additions and 13 deletions

View File

@ -3,29 +3,45 @@
package com.microsoft.signalr; package com.microsoft.signalr;
import java.util.*; import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;
class CallbackMap { class CallbackMap {
private final Map<String, List<InvocationHandler>> handlers = new ConcurrentHashMap<>(); private final Map<String, List<InvocationHandler>> handlers = new HashMap<>();
private final ReentrantLock lock = new ReentrantLock();
public InvocationHandler put(String target, ActionBase action, Class<?>... classes) { public InvocationHandler put(String target, ActionBase action, Class<?>... classes) {
InvocationHandler handler = new InvocationHandler(action, classes); try {
handlers.compute(target, (key, value) -> { lock.lock();
if (value == null) { InvocationHandler handler = new InvocationHandler(action, classes);
value = new ArrayList<>(); if (!handlers.containsKey(target)) {
handlers.put(target, new ArrayList<>());
} }
value.add(handler); handlers.get(target).add(handler);
return value; return handler;
}); } finally {
return handler; lock.unlock();
}
} }
public List<InvocationHandler> get(String key) { public List<InvocationHandler> get(String key) {
return handlers.get(key); try {
lock.lock();
return handlers.get(key);
} finally {
lock.unlock();
}
} }
public void remove(String key) { public void remove(String key) {
handlers.remove(key); try {
lock.lock();
handlers.remove(key);
} finally {
lock.unlock();
}
} }
} }