我在项目中使用了GUAVA的条纹锁,用于同步过程的每个唯一标识符的输入数据,它为下一步处理此数据提供了正确的数据顺序。
Striped<Lock> locks = Striped.lazyWeakLock(10);
public void put(String id, String data) {
Lock lock = locks.get(id);
lock.lock()
try {
// process data
} finally {
lock.unlock()
}
}
此代码可以正常工作,提供正确的数据顺序。 但是我想获得对当前对象的全局锁定(独占访问)以修改某些数据。因此,在修改数据之前,我想停止获取所有唯一ID的锁。
可能的解决方案:
示例:
if (locked) {
global.lock()
global.unlock()
Lock lock = locks.get(id);
...
} else {
Lock lock = locks.get(id);
if (locked){
...
}
lock.lock();
}
void extraLock(){
global.lock();
locked = true;
// modify data
locked = false;
global.unlock()
}
我认为具有全局锁定的解决方案看起来不太好(标志,锁定,仔细检查等)
问题: 您能提出任何可以帮助我解决此问题的解决方案吗? 还是你能说出一些主意吗?
谢谢