Я понимаю, что методы ConcurrentHashMap являются потокобезопасными, но как насчет составных операций, которые не являются атомарными, например, посмотрите этот фрагмент кода - если 2 разных потока вызывают его одновременно с одним и тем же «myKey», это невозможноможет возникнуть условие гонки?
myMap - это ConcurrentHashMap
myValues = myMap.get(myKey);
if (myValues == null) {
myValues = new List()
myMap.add(myKey, myValues);
}
myValue.add(new list item);
Как записать вышеописанное в безопасном для потока виде с помощью только ConcurrentHashMap и без использования отдельных блокировок и т. д.,
putIfAbsent, похоже, тоже не решил проблему или что-то вроде этого возможно:
myValues = myMap.putIfAbsent(myKey, new List());
myValues.add(new list item);
Это правильно и безопасно для потока?
Спасибо