2011-08-19 71 views
0

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

该方法是否被取消?或者它可能停滞了? :O

+0

锁的全部重点在于,如果有人在原始锁柜解锁之前试图锁定它,那么它会被锁定,直到它解锁。这样,对于线程来说,它所知道的只是它锁定,做它的东西,然后解锁,并知道它在它内部是唯一的。 – corsiKa

回答

1

线程将阻塞直到锁定可用。 (docs)

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

1

的线程将阻塞。如果多个线程尝试获取此锁,则所有这些锁都将被阻止。当锁被释放时,来自等待池的恰好一个线程将获得该锁,其余的将继续等待。看到公平和不公平的锁之间的difference

0

如果你不想阻止,你可以使用Lock.tryLock()(不需要等待)或tryLock(long time, TimeUnit unit),它只会等待你指定的时间。

1

既然你说ReentrantReadWriteLock,行为取决于你是否在谈论采取读锁或与ReadWriteLock关联的写锁。

  1. 如果你想获取写入锁定,您将被阻塞,直到所有持有者释放锁(无论是读锁或写锁)
  2. 如果你想获取读锁,并没有持有人的写锁,你将永远能够获得它,即使还有其他读锁持有人
  3. 如果你正试图获得读锁,并有持有人写锁,您将被锁定,直到写锁持有者释放写锁

只要没有写入器,读锁就可以由多个线程同时执行。

相关问题