Synchronize en valor, no objeto [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Synchronizing en objetos String en Java 17 respuestasQuiero hacer algo así en Java
public void giveMoney(String userId, int money) {
synchronized (userId) {
Profile p = fetchProfileFromDB(userId);
p.setMoney(p.getMoney() + userId);
saveProfileToDB(p);
}
}
Pero, por supuesto, la sincronización en una cadena no es correcta. ¿Cuál es la forma correcta de hacer algo como esto?