首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8盖章锁:为什么这段代码不会导致死锁?

Java 8盖章锁:为什么这段代码不会导致死锁?
EN

Stack Overflow用户
提问于 2021-01-13 16:27:34
回答 1查看 192关注 0票数 0

为了理解Java 8中的乐观锁定,我遇到了以下代码。原版博客

正如在博客中解释的那样,这段代码试图将读锁转换为写lock.The代码,如果读锁转换为写锁失败,则请求显式写锁。

令我费解的是,,当父线程已经持有读锁时,怎么可能会授予显式写锁呢?--在强制请求写锁之前,它看起来并不像读取锁在任何时候都被释放。据我错误的理解,线程会无限地等待写锁,因为读取锁从未释放,从而造成死锁。

,为什么这不会导致这里的死锁?

代码语言:javascript
复制
ExecutorService executor = Executors.newFixedThreadPool(2);
StampedLock lock = new StampedLock();

executor.submit(() -> {
    long stamp = lock.readLock();
    try {
        if (count == 0) {
            stamp = lock.tryConvertToWriteLock(stamp);
            if (stamp == 0L) {
                System.out.println("Could not convert to write lock");
                stamp = lock.writeLock();
            }
            count = 23;
        }
        System.out.println(count);
    } finally {
        lock.unlock(stamp);
    }
});

stop(executor);

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-01-13 16:43:17

这个有用吗?来自API for tryConvertToWriteLock

如果锁状态与给定的邮票匹配,则原子地执行以下操作之一。如果邮票表示持有写锁,则返回它。,或者,如果读锁可用,则释放读锁并返回一个写戳。,或者,如果是乐观读,则只有在立即可用时才返回写标记。在所有其他情况下,此方法返回零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65705957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档