Вопрос проверяет умение проектировать блокировки для конкретных идентификаторов в многопоточной среде.
Используйте ConcurrentHashMap с ReentrantLock или synchronized:
Map<Long, Lock> locks = new ConcurrentHashMap<>();
Lock lock = locks.computeIfAbsent(id, k -> new ReentrantLock());
lock.lock();
try {
// Критическая секция
} finally {
lock.unlock();
}1. Реализация с ReentrantLock:
Каждому ID соответствует свой Lock.
computeIfAbsent гарантирует атомарность создания.
2. Альтернатива с synchronized:
Map<Long, Object> locks = new ConcurrentHashMap<>();
Object lock = locks.computeIfAbsent(id, k -> new Object());
synchronized (lock) {
// Критическая секция
}