synchronizacja java na podstawie parametru

Szukam sposobu na zsynchronizowanie metody opartej na parametrze, który otrzymuje, coś takiego:

public synchronized void doSomething(name){
//some code
}

Chcę tej metodydoSomething do synchronizacji na podstawiename taki parametr:

Wątek 1: doSomething („a”);

Wątek 2: doSomething („b”);

Wątek 3: doSomething ("c");

Wątek 4: doSomething („a”);

Wątek 1, Wątek 2 i Wątek 3 wykonają kod bez synchronizacji, ale wątek 4 będzie czekał, aż wątek 1 zakończy kod, ponieważ ma tę samą wartość „a”.

Dzięki

AKTUALIZACJA

Na podstawie wyjaśnień Tudora myślę, że stoję przed innym problemem: oto przykład nowego kodu:

private HashMap locks=new HashMap();
public void doSomething(String name){
    locks.put(name,new Object());
    synchronized(locks.get(name)) {
        // ...
    }
    locks.remove(name);
}

Powodem, dla którego nie zapełniam mapy zamków, jest to, że nazwa może mieć dowolną wartość.

Na podstawie powyższego przykładu problem może pojawić się podczas dodawania / usuwania wartości z mapy mieszającej przez wiele wątków w tym samym czasie, ponieważ HashMap nie jest bezpieczny dla wątków.

Więc moje pytanie brzmi, czy zrobię toHashMap a ConcurrentHashMap który jest bezpieczny dla wątków, czy zsynchronizowany blok zatrzyma dostęp innych wątków do locks.get (nazwa)?

questionAnswers(7)

yourAnswerToTheQuestion