2011-08-19 44 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. 如果你正試圖獲得讀鎖,並有持有人寫鎖,您將被鎖定,直到寫鎖持有者釋放寫鎖

只要沒有寫入器,讀鎖就可以由多個線程同時執行。

相關問題