Re: Чем заменить synchronized (string.intern())
От: C0s Россия  
Дата: 04.02.18 20:54
Оценка: +2
Здравствуйте, 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 — атомарный, т.о. избавишься от громоздкости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.