0

当应用 reentrantReadWriteLock 并且它被锁定时,如果另一个线程在执行另一个块时访问该锁会发生什么?(因此,在它到达 .unlock 之前)

方法被取消了吗?或者它已经停滞不前了?:O

4

4 回答 4

2

由于您说 ReentrantReadWriteLock,因此行为取决于您是在谈论获取与 ReadWriteLock 关联的读锁还是写锁。

  1. 如果你试图获取写锁,你将被阻塞,直到所有持有者释放锁(无论是读锁还是写锁)
  2. 如果您尝试获取读锁并且没有写锁持有者,即使有其他读锁持有者,您也始终能够获取它
  3. 如果你试图获取读锁并且有写锁持有者,你将被阻塞,直到写锁持有者释放写锁

只要没有写者,读锁就可以被多个线程同时持有。

于 2011-08-20T00:09:31.743 回答
1

线程将阻塞,直到锁可用。(文档)

如果您只想获取可用的锁,您可以使用tryLock()

于 2011-08-19T16:23:37.580 回答
1

线程将阻塞。如果有多个线程试图获取这个锁,它们都会被阻塞。当锁被释放时,等待池中的一个线程将获得锁,其余的仍将等待。查看公平锁和不公平锁之间的区别。

于 2011-08-19T16:25:49.197 回答
0

如果您不想阻止,您可以使用Lock.tryLock()(无需等待即可尝试)或tryLock(long time, TimeUnit unit)仅等待您指定的时间。

于 2011-08-19T16:25:50.003 回答