我的分布式系统需要锁定' (如果这是正确的术语)资源" / dev / resource1"。该锁需要存在几个小时,然后才能被释放。该版本可能位于不同的线程或JVM中。 JVM可能已经死了。
我尝试使用:
public boolean createLocks(ArrayList<String> paths) {
InterProcessMultiLock mutex = new InterProcessMultiLock(client, paths );
try{
boolean works = mutex.acquire(1, TimeUnit.SECONDS );
return works;
}catch(Exception e){
return false;
}
}
和
public boolean releaseLocks(List<String> path) {
try{
InterProcessMultiLock mutex = new InterProcessMultiLock(client, path );
mutex.release();
}catch(Exception e){
e.printStackTrace();
}
return true;
}
但第二次我锁定了相同的路径,它失败了。
assertTrue("Creating simple lock", adapter.createLocks(locks) );
assertTrue("Releasing simple lock.", adapter.releaseLocks(locks) );
assertTrue("Creating simple lock", adapter.createLocks(locks) ); //Fails
java.lang.IllegalMonitorStateException:你没有锁:/ aamm / unittest / locktest / 1472646694110
我错过了什么?还有其他我应该使用的东西吗?我应该只创建节点而不是用锁来搞错?