欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ReentrantReadWriteLock.WriteLock

最编程 2024-07-28 19:31:58
...
如果在给定的等待时间内没有被另一个线程持有并且当前线程不是interrupted ,则获取写锁定。

如果读取锁定和写入锁定都不被另一个线程保持,则立即获取写入锁定,并立即返回值true ,将写入锁定保持计数设置为1。 如果此锁定已设置为使用公平排序策略,则在任何其他线程等待写入锁定时, 将不会获取可用锁定。 这与tryLock()方法形成对比。 如果你想要一个定时tryLock允许在公平锁定上进行tryLock锁,那么将定时和非定时表格组合在一起:

   if (lock.tryLock() || lock.tryLock(timeout, unit)) { ... } 

如果当前线程已经保持此锁定,则保持计数增加1并且该方法返回true

如果锁由另一个线程持有,那么当前线程将被禁用以进行线程调度,并且在发生以下三种情况之一之前处于休眠状态:

  • 写锁定由当前线程获取; 要么
  • 其他一些线程interrupts当前线程; 要么
  • 指定的等待时间过去了

如果获取写锁定,则返回值true ,并将写锁定保持计数设置为1。

如果当前线程:

  • 在进入此方法时设置其中断状态; 要么
  • 获取写锁定时为interrupted
然后抛出InterruptedException并清除当前线程的中断状态。

如果指定的等待时间过去,则返回值false 如果时间小于或等于零,则该方法将不会等待。

在该实现中,由于该方法是显式中断点,因此优先考虑响应正常或重入获取锁的中断,并且过度报告等待时间的流逝。