首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >盖章锁澄清。Java

盖章锁澄清。Java
EN

Stack Overflow用户
提问于 2015-12-03 14:21:07
回答 1查看 433关注 0票数 1

我是否正确地指出,获取StampedLock锁的这两种方法之间的唯一区别是:

代码语言:javascript
复制
  stampedLock.readLock();
  stampedLock.tryOptimisticRead();

当读锁至少由一个线程持有时,写锁不能接受;而乐观读允许获得写锁吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 14:45:41

基本上是的。

很多关于这个话题的文字已经在网上写过了,但是我会试着给你一个简单的理解。

代码语言:javascript
复制
stampedLock.readLock();

将尝试获取读锁,可能等待写入锁结束。一旦您完成读锁,您必须使用unlockRead(long)解锁。锁不是可重入的。写锁必须等待独占访问,即所有读锁结束。

代码语言:javascript
复制
stampedLock.tryOptimisticRead();

不锁定,但返回一个非零的邮票值,表示您请求读取的点。如果返回的值为零,则锁当前处于独占写入锁中,不等待写入锁结束。可以同时获得写锁并执行写操作。一旦执行了读操作,就可以通过validate(long)验证您的邮票是否仍然有效。如果true在这段时间内没有获得写锁,那么您就可以继续了。一般来说,如果false要升级到readLock(),那么就可以使用实际的非独占锁再次尝试读取。

希望这能有所帮助。StampedLock JavaDoc和这篇文章是开始阅读的好地方。

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

https://stackoverflow.com/questions/34068427

复制
相关文章

相似问题

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