这两种获取StampedLock锁的方法之间的唯一区别是:
stampedLock.readLock();
stampedLock.tryOptimisticRead();
是不是当读锁至少被一个线程持有时,写锁就拿不到;而乐观读允许获取写锁?
最佳答案
基本上是的。
互联网上已经有很多关于这个主题的文字,但我会尽力给您简要的理解。
<小时/>stampedLock.readLock();
将尝试获取读锁,可能会等待写锁结束。完成读锁定后,您必须使用 unlockRead(long)
解锁。该锁不可重入。写锁必须等待独占访问,即所有读锁结束。
stampedLock.tryOptimisticRead();
不锁定,但返回一个非零标记值,该值表示您请求读取的点。如果返回的值为零,则该锁当前处于独占写锁中,不等待写锁结束。可以同时获取写锁并执行写操作。执行读取操作后,您可以通过 validate(long)
验证您的标记是否仍然有效。如果true
,那么在此期间尚未获得写锁,您可以继续。一般来说,如果false
,您将升级到readLock()
,并尝试使用实际的非独占锁再次读取。
希望这有帮助。 StampedLock JavaDoc 和 this article是开始阅读的好地方。
关于java - 印章锁说明。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068427/