fix: concurrency safety in ProcessotTrackerPool

This commit is contained in:
tjq 2020-12-05 10:36:33 +08:00
parent b4f92bbc25
commit 9db9d0d01f

View File

@ -25,18 +25,13 @@ public class ProcessorTrackerPool {
/**
* 获取 ProcessorTracker如果不存在则创建
*/
public static ProcessorTracker getProcessorTracker(Long instanceId, String address, Supplier<ProcessorTracker> creator) {
public static synchronized ProcessorTracker getProcessorTracker(Long instanceId, String address, Supplier<ProcessorTracker> creator) {
ProcessorTracker processorTracker = processorTrackerPool.getOrDefault(instanceId, Collections.emptyMap()).get(address);
if (processorTracker == null) {
synchronized (ProcessorTrackerPool.class) {
processorTracker = processorTrackerPool.getOrDefault(instanceId, Collections.emptyMap()).get(address);
if (processorTracker == null) {
processorTracker = creator.get();
processorTrackerPool.computeIfAbsent(instanceId, ignore -> Maps.newHashMap()).put(address, processorTracker);
}
}
}
return processorTracker;
}