问一个Redisson 源码中的问题

发布于 2022-09-11 23:53:30 字数 1410 浏览 16 评论 0

image.png

如上图,在RedissonLock.tryLock() 方法中

个人理解

381行,当前线程无法获取到锁时,订阅解锁事件,调用await等待获取锁的线程释放锁(或者超出等待时间)

我遇到的问题
 public static void main(String[] args) throws InterruptedException {
        Config config = new Config();
        config.useSingleServer()
                .setAddress("redis://127.0.0.1:6379");
        RedissonClient redissonClient =Redisson.create(config);

        RLock lock = redissonClient.getLock("test");
        lock.tryLock(10, 10, TimeUnit.SECONDS);
        new Thread(() -> {
            try {
                lock.tryLock(10, 10, TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            lock.unlock();

        }).start();

        try {
            System.out.println("执行主线程逻辑");
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        lock.unlock();
        System.out.println("主线程解锁");
    }

debug上述代码时,主线程还没有解锁时,我发现线程2(就是我的new的Thread)已经到了我394行的断点...并没有像我想的那样等待释放锁,超时的问题也不存在...

redisson 版本3.10.7

请问各位问题出在哪?我理解的有问题吗

再补充一下

image.png

再释放锁执行前,出现了一个线程执行了 l.countDown() 导致await()方法结束,不理解这是为什么

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等往事风中吹 2022-09-18 23:53:30

emmm, 我刚刚在这里找到答案了 https://www.programcreek.com/...

之前是我理解错了,当订阅成功时381行就会返回true,监听解锁成功事件的是信号量

LockPubSub.java
clipboard.png

tryLock剩余源码
clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文