只是關於Java中的ReadWriteLocks(特別是ReentrantReadWriteLock實現)的快速問題,因爲我沒有找到明確的sun文檔。Java ReentrantReadWriteLock請求
如果一個線程在另一個線程要求寫入鎖定時讀取鎖定,會發生什麼? 寫鎖定線程是否必須等待所有當前保存的讀取鎖定被釋放? 另外,是否所有新的讀取鎖定請求都被阻止,直到寫入鎖定被授予並釋放?
感謝
只是關於Java中的ReadWriteLocks(特別是ReentrantReadWriteLock實現)的快速問題,因爲我沒有找到明確的sun文檔。Java ReentrantReadWriteLock請求
如果一個線程在另一個線程要求寫入鎖定時讀取鎖定,會發生什麼? 寫鎖定線程是否必須等待所有當前保存的讀取鎖定被釋放? 另外,是否所有新的讀取鎖定請求都被阻止,直到寫入鎖定被授予並釋放?
感謝
的Javadoc解釋這一點:
此類不徵收讀者 或作家的偏好排序爲 鎖訪問。但是,它確實支持 可選公平性 政策。當構建爲公平時, 線索使用近似到達訂單策略的 競爭輸入。 當寫鎖被釋放 要麼等待時間最長的單 作家將被分配寫 鎖,或者如果有讀者等待 比任何作家長,集 讀者將被分配讀取 鎖。當建造爲不公平時, 進入鎖定的次序需要 未按到達順序。在 的情況下,如果讀者處於活動狀態,並且一個 寫入者進入鎖定,則後續讀取者將被授予 讀取鎖定,直到寫入者 已經獲取並釋放寫入 鎖定爲止。
如果讀取鎖由一個線程時寫鎖被另一個請求舉行,會發生什麼?寫入鎖定線程是否必須等待所有當前保存的讀取鎖定被釋放?
是的,作者將不得不等待。但它只會等待當前持有的讀鎖。任何稍後到達的讀者都將在作者之後排隊。
另外,是否所有新的讀取鎖定請求都會被阻止,直到寫入鎖定被授予並釋放?
是
一個ReadWriteLock
不能在同一時間讀鎖持有寫鎖。當讀鎖定時,請求寫鎖定將導致阻塞或失敗。