當應用reentrantReadWriteLock並且它被鎖定時,如果另一個線程正在執行另一個塊時訪問Lock,會發生什麼情況? (因此,在它到達.unlock之前)多線程想要訪問ReentrantReadWriteLock時會發生什麼?
該方法是否被取消?或者它可能停滯了? :O
當應用reentrantReadWriteLock並且它被鎖定時,如果另一個線程正在執行另一個塊時訪問Lock,會發生什麼情況? (因此,在它到達.unlock之前)多線程想要訪問ReentrantReadWriteLock時會發生什麼?
該方法是否被取消?或者它可能停滯了? :O
的線程將阻塞。如果多個線程嘗試獲取此鎖,則所有這些鎖都將被阻止。當鎖被釋放時,來自等待池的恰好一個線程將獲得該鎖,其餘的將繼續等待。看到公平和不公平的鎖之間的difference。
如果你不想阻止,你可以使用Lock.tryLock()
(不需要等待)或tryLock(long time, TimeUnit unit)
,它只會等待你指定的時間。
既然你說ReentrantReadWriteLock,行爲取決於你是否在談論採取讀鎖或與ReadWriteLock關聯的寫鎖。
只要沒有寫入器,讀鎖就可以由多個線程同時執行。
鎖的全部重點在於,如果有人在原始鎖櫃解鎖之前試圖鎖定它,那麼它會被鎖定,直到它解鎖。這樣,對於線程來說,它所知道的只是它鎖定,做它的東西,然後解鎖,並知道它在它內部是唯一的。 – corsiKa