Zookeeper /策展人不能两次锁定相同的路径

时间:2016-08-31 13:18:13

标签: java multithreading locking apache-zookeeper apache-curator

我的分布式系统需要锁定' (如果这是正确的术语)资源" / 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

我错过了什么?还有其他我应该使用的东西吗?我应该只创建节点而不是用锁来搞错?

0 个答案:

没有答案