2009-07-07 46 views
0

只是關於Java中的ReadWriteLocks(特別是ReentrantReadWriteLock實現)的快速問題,因爲我沒有找到明確的sun文檔。Java ReentrantReadWriteLock請求

如果一個線程在另一個線程要求寫入鎖定時讀取鎖定,會發生什麼? 寫鎖定線程是否必須等待所有當前保存的讀取鎖定被釋放? 另外,是否所有新的讀取鎖定請求都被阻止,直到寫入鎖定被授予並釋放?

感謝

回答

3

的Javadoc解釋這一點:

此類不徵收讀者 或作家的偏好排序爲 鎖訪問。但是,它確實支持 可選公平性 政策。當構建爲公平時, 線索使用近似到達訂單策略的 競爭輸入。 當寫鎖被釋放 要麼等待時間最長的單 作家將被分配寫 鎖,或者如果有讀者等待 比任何作家長,集 讀者將被分配讀取 鎖。當建造爲不公平時, 進入鎖定的次序需要 未按到達順序。在 的情況下,如果讀者處於活動狀態,並且一個 寫入者進入鎖定,則後續讀取者將被授予 讀取鎖定,直到寫入者 已經獲取並釋放寫入 鎖定爲止。


如果讀取鎖由一個線程時寫鎖被另一個請求舉行,會發生什麼?寫入鎖定線程是否必須等待所有當前保存的讀取鎖定被釋放?

是的,作者將不得不等待。但它只會等待當前持有的讀鎖。任何稍後到達的讀者都將在作者之後排隊。

另外,是否所有新的讀取鎖定請求都會被阻止,直到寫入鎖定被授予並釋放?

1

一個ReadWriteLock不能在同一時間讀鎖持有寫鎖。當讀鎖定時,請求寫鎖定將導致阻塞或失敗。