Java 一致性锁解锁使用

Java 一致性锁解锁使用,java,caching,locking,oracle-coherence,Java,Caching,Locking,Oracle Coherence,我有一个关于一致性锁解锁机制的测试样本,如下所示: public class Test { public static void main(String[] args) throws InterruptedException, IOException, IllegalArgumentException, IllegalAccessException { Trt test=new Trt(); test.lock(); Thread a

我有一个关于一致性锁解锁机制的测试样本,如下所示:

public class Test {


    public static void main(String[] args) throws InterruptedException, IOException, IllegalArgumentException, IllegalAccessException {

        Trt test=new Trt();
        test.lock();
        Thread a=new Thread(test);
        a.start();
    }

    public static class Trt implements Runnable{

        NamedCache cache=null;

        @Override
        public void run() {

            System.out.println(cache.unlock("asd"));


        }

        public void lock(){
            cache= CacheFactory.getCache(Globals.REGISTRY_CACHE_NAME);

            System.out.println(cache.lock("asd"));

        }

    }
}
因此,结果是:

true
false
我期望的结果是:

true
true
但情况是,我只有一个“test”项,我正在使用它,它只有一个缓存实例。因此,缓存的所有者就是该缓存实例

为什么它不能关闭它并最终返回
false

谢谢


《Oracle一致性开发人员指南》中的Ali

锁定到位后,调用方(在同一线程或同一集群节点中,取决于租约粒度配置)负责释放锁定

默认情况下,一致性使用线程所有权粒度,因此这可能是不释放锁的原因

thread的值意味着锁由获得它们的线程持有,并且只能由该线程释放。member的值意味着锁由集群节点持有,在集群节点上运行并获得锁的任何线程都可以释放锁


有关更多详细信息,请参阅和。

是否打印为真,但不打印为假?程序在false打印出来之前就退出了?我想应该是真的。或者我想错了:)谢谢你,伙计。真正有价值的信息