Управление несколькими замками

У меня следующая ситуация: яm одновременно обрабатывает запросы с заданным ключом. Я могу обрабатывать любое количество запросов одновременно, если каждый выполняемый ключ уникален.

Я полный новичок с параллелизмом в Java. Для этого должен быть какой-то шаблон / утилита / существующий вопрос, но я могуне могу понять, что искать. Надеясь, что кто-нибудь может указать мне верное направление или прокомментировать то, что у меня есть до сих пор.

Этот класс управляет замками:

class LockMap {
    private Map 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();
            }
        }
    }
}

Затем я использую менеджер блокировок так:

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

Это правильный способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос