当应用reentrantReadWriteLock并且它被锁定时,如果另一个线程正在执行另一个块时访问Lock,会发生什么情况? (因此,在它到达.unlock之前)多线程想要访问ReentrantReadWriteLock时会发生什么?
该方法是否被取消?或者它可能停滞了? :O
当应用reentrantReadWriteLock并且它被锁定时,如果另一个线程正在执行另一个块时访问Lock,会发生什么情况? (因此,在它到达.unlock之前)多线程想要访问ReentrantReadWriteLock时会发生什么?
该方法是否被取消?或者它可能停滞了? :O
的线程将阻塞。如果多个线程尝试获取此锁,则所有这些锁都将被阻止。当锁被释放时,来自等待池的恰好一个线程将获得该锁,其余的将继续等待。看到公平和不公平的锁之间的difference。
如果你不想阻止,你可以使用Lock.tryLock()
(不需要等待)或tryLock(long time, TimeUnit unit)
,它只会等待你指定的时间。
既然你说ReentrantReadWriteLock,行为取决于你是否在谈论采取读锁或与ReadWriteLock关联的写锁。
只要没有写入器,读锁就可以由多个线程同时执行。
锁的全部重点在于,如果有人在原始锁柜解锁之前试图锁定它,那么它会被锁定,直到它解锁。这样,对于线程来说,它所知道的只是它锁定,做它的东西,然后解锁,并知道它在它内部是唯一的。 – corsiKa