Sincronize no valor, não no objeto [duplicado]

Esta pergunta já tem uma resposta aqui:

incronizando objetos String em Ja 17 respostas

Eu 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?

questionAnswers(7)

yourAnswerToTheQuestion