ConcurrentHashMap synchronizes on .computeIfAbsent even on hits, so this does a .get(key) first, which most of our use should be hits, and then falls back to the CHM computeIfAbsent for thread safe puts. Also improve concurrency on handler and group collections to use a synchronized list instead of an array deque for concurrency safety.
142 KiB
142 KiB