Здравствуйте, vsb, Вы писали:
vsb>ConcurrentMap<Key, Object> locks = new ConcurrentHashMap<>();
vsb>...
vsb> Object lock = locks.get(key);
vsb> if (lock == null) {
vsb> Object newLock = new Object();
vsb> Object existingLock = locks.putIfAbsent(key, newLock);
vsb> lock = existingLock == null ? newLock : existingLock;
vsb> }
vsb> synchronized (lock) {
vsb> ...
vsb> }
vsb>но как-то это всё сложно выглядит.
Не знаю, можно ли другим примитивом, но если делать так, как написано, то тебе надо использовать computeIfAbsent, который для ConcurrentHashMap — атомарный, т.о. избавишься от громоздкости.