Zarządzanie wieloma blokadami

Mam następującą sytuację: jednocześnie przetwarzam żądania, które mają podany klucz. Mogę przetwarzać dowolną liczbę żądań w tym samym czasie, o ile każdy trwający klucz jest unikalny.

Jestem całkowitym debiutantem ze współbieżnością w Javie. W tym celu musi istnieć jakieś wzorzec / narzędzie / istniejące pytanie, ale nie wiem, czego szukać. Mając nadzieję, że ktoś może wskazać mi właściwy kierunek, lub skomentować to, co mam do tej pory.

Ta klasa zarządza zamkami:

class LockMap<K> {
    private Map<K, Object> locks = new HashMap<>();

    void acquireLock(K key) throws InterruptedException {
        Object lockObj;
        synchronized (locks) {
            lockObj = locks.get(key);

            if (lockObj == null) lockObj = new Object();

            locks.put(key, lockObj);
        }

        synchronized (lockObj) {
            lockObj.wait();
        }
    }

    void releaseLock(K key) {
        Object lockObj;
        synchronized (locks) {
            lockObj = locks.get(key);
            locks.remove(key);
        }

        if (lockObj != null) {
            synchronized (lockObj) {
                lockObj.notify();
            }
        }
    }
}

Następnie używam menedżera blokady w ten sposób:

// lockMap is instance of LockMap shared across all threads
void doSomething(K key) {
    lockMap.acquireLock(key);
    try {
        // something
    } finally {
        lockMap.releaseLock(key);
    }
}

Czy to jest właściwy sposób?

questionAnswers(2)

yourAnswerToTheQuestion