我有以下代码来获取分布式锁:
public void foo(){
try {
if (!lock.acquire(5, TimeUnit.MINUTES)) {
throw new RuntimeException("Could not acquire lock");
}
doWork();
} finally {
if (lock.isAcquiredInThisProcess()) {
lock.release();
}
}
}
我看到的问题是,有时会在zookeeper中创建锁定,但lock.acquire(..)
调用正在返回false
。所以看起来锁是创建的,但客户端并不知道它,这意味着所有对foo()
的调用都被卡住了。
重新启动java服务可以解决问题。
我正在使用策展人2.11.0。
任何有想法可能出错的人?