Sincronize no valor, não no objeto [duplicado]
Esta pergunta já tem uma resposta aqui:
incronizando objetos String em Ja 17 respostasEu quero fazer algo assim em Java
public void giveMoney(String userId, int money) {
synchronized (userId) {
Profile p = fetchProfileFromDB(userId);
p.setMoney(p.getMoney() + userId);
saveProfileToDB(p);
}
}
Mas é claro que a sincronização em uma string não está correta. Qual é a maneira correta de fazer algo assim?