盖章锁定澄清。 Java的

时间:2015-12-03 14:21:07

标签: java multithreading locking

我是对的,这两种获取StampedLock锁的方法之间的唯一区别是:

  stampedLock.readLock();
  stampedLock.tryOptimisticRead();

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

1 个答案:

答案 0 :(得分:2)

基本上,是的。

很多人都在互联网上写过关于这个主题的文字,但我会尽量给你简要介绍。

stampedLock.readLock();

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

stampedLock.tryOptimisticRead();

不锁定,但返回非零戳记值,表示您请求读取的点。如果返回的值为零,则锁当前处于独占写锁定状态,不等待写锁定结束。可以同时获取写锁定并执行写入操作。执行完阅读操作后,您可以通过validate(long)验证邮票是否仍然有效。如果true,则在此期间未获得写锁定,您可以继续。一般来说,如果false您将升级为readLock()尝试,则会使用实际非排他锁定再次阅读。

希望这会有所帮助。 StampedLock JavaDoc和this article是开始阅读的好地方。