Управление несколькими замками
У меня следующая ситуация: я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);
}
}
Это правильный способ сделать это?