Мне нужно разрешить ситуацию для одинаковых объектов с разным расположением памяти (это происходит для REST-запроса из-за многопоточности).
Так что в качестве части решения я реализовал сервис.Я делюсь здесь наиболее важными частями:
private Map<T, ReentrantLock> lockHolder = new HashMap();
void unLock(T monitorMarker) {
synchronized (lockHolder) {
ReentrantLock lock = lockHolder.get(monitorMarker);
if (lock == null || lock.getHoldCount() == 0) {
return;
}
lock.unlock();
if (lock.getHoldCount() == 0) {
lockHolder.remove(monitorMarker);
}
}
}
ReentrantLock getLockForCalendar(T monitorMarker) {
synchronized(monitorMarker) {
ReentrantLock lock = lockHolder.get(monitorMarker);
if (lock == null) {
lock = new ReentrantLock();
lockHolder.put(monitorMarker, lock);
}
return lock;
}
}
в целом работает без проблем.
Сейчас мне нужно сопоставить эту утилиту с метаданными домена (решение может быть с использованием Map<String, Map<Object, Lock>>
или внедрением кэша и ничего неразрешимого) ...
Я предпочитаю использовать JDK util или open sourceиспользовать с аналогичным решением, потому что они уже обеспечивают обработку этих случаев ... Я считаю, что многие разработчики сталкивались с подобными проблемами, и решение должно присутствовать в библиотеках с открытым исходным кодом.Я исследовал spring
утилиты, apache
утилиты некоторых google
библиотек, но я не нашел удовлетворительного результата.
Предложите мне подумать о том, какие библиотеки использовать, пожалуйста.