我需要解决具有不同内存位置的相等对象的情况(因为多线程而发生在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或开源UTIL与类似的解决方案结合使用,因为它们已经提供了处理这种情况的功能…我相信许多面临类似问题和解决方案的开发人员应该出现在开放源码库中。我已经研究过了
spring
公用设施,
apache
公用事业部分
google
但我没有找到令人满意的结果。
建议我考虑使用合适的图书馆。