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 ,
如果指定的等待时间过去,则返回值false
。 如果时间小于或等于零,则该方法将不会等待。
在该实现中,由于该方法是显式中断点,因此优先考虑响应正常或重入获取锁的中断,并且过度报告等待时间的流逝。
上一篇: ReentrantLock
下一篇: 简单聊一下iOS中锁的功能与应用