ConcurrentHashMap y operaciones que abarcan 2 llamadas separadas

Entiendo que los métodos ConcurrentHashMap son seguros para subprocesos, pero qué pasa con las operaciones compuestas que no son atómicas, por ejemplo, vea este código: si 2 subprocesos diferentes lo llaman al mismo tiempo con la misma "myKey", ¿no es posible para una condición de carrera? ¿que se produzca?

myMap es un ConcurrentHashMap

myValues = myMap.get(myKey);
if (myValues == null) {
    myValues = new List()
    myMap.add(myKey, myValues);
}
myValue.add(new list item);

¿Cómo escribo lo anterior de una manera segura para subprocesos con solo ConcurrentHashMap y sin usar bloqueos separados, etc.

putIfAbsent tampoco parece resolver el problema o es algo así:

myValues =  myMap.putIfAbsent(myKey, new List());
myValues.add(new list item);

¿Es esto correcto e hilo seguro?
Gracias

Respuesta 1

Posible duplicado: un servidor de sockets PHP con clientes Flash Estoy creando una aplicación en mi servidor con la ayuda de un desarrollador de flash, y él me pidió que construyera un servidor de sockets para comunicarme con el ...

Estoy tratando de crear una clase GSON pero no estoy seguro de cómo manejar este caso. De acuerdo con las especificaciones de la API, las opciones pueden ser valores de lista: ["uno", "dos"] O puede ser una lista de pares {"valor": "Etiqueta"} ...

Hice algo en mi proyecto y todos los poli se vuelven transparentes. Descargué mi viejo git, todo estaba bien, pero todavía era transparente. Evento de marca: en el renderizado, todos los dibujos polivinílicos rinden público (...

Tengo un escenario en el que tengo las mismas columnas de tabla pero con diferentes nombres como TicketBooking y TicketBookingHistory. Tengo una sola clase de pojo TicketBooking. ¿Es posible proporcionar más ...