java - 印章锁说明。 java

标签 java multithreading locking

这两种获取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/

相关文章:

java - 在并行流上调用顺序使所有先前的操作顺序

python - 我可以暂停和恢复的线程?

python - 如何抽象调用这个具体 Thread 类的方式?

MySQL:从带有锁的另一个表创建一个表

rest - 使用内存中的H2数据库在Grails 2.4.4中执行REST API功能测试时,表锁定超时

java - 使用 postgresql 连接到 Wildfly 上的数据库时出现问题

java - 如果参数化,按需初始化持有者习惯用法仍然安全吗?

java - 优先队列,可比

python - fcntl.lockf() 以何种方式锁定文件?

java - Swing- 取消对话框时关闭整个应用程序