|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface ReadWriteLock
ReadWriteLock 維護了一對相關的鎖
,一個用於只讀操作,另一個用於寫入操作。只要沒有 writer,讀取鎖
可以由多個 reader 執行緒同時保持。寫入鎖
是獨佔的。
所有 ReadWriteLock 實作都必須保證 writeLock 操作的記憶體同步效果也要保持與相關 readLock 的聯繫。也就是說,成功獲取讀鎖的執行緒會看到寫入鎖之前版本所做的所有更新。
與互斥鎖相比,讀-寫鎖允許對共享資料進行更高層級別的共時存取。雖然一次只有一個執行緒(writer 執行緒)可以修改共享資料,但在許多情況下,任何數量的執行緒可以同時讀取共享資料(reader 執行緒),讀-寫鎖利用了這一點。從理論上講,與互斥鎖相比,使用讀-寫鎖所允許的共時性增強將帶來更大的性能提高。在實踐中,只有在多處理器上並且只在存取網要適用於共享資料時,才能完全實作共時性增強。
與互斥鎖相比,使用讀-寫鎖能否提升性能則取決於讀寫操作期間讀取資料相對於修改資料的頻率,以及資料的爭用——即在同一時間試圖對該資料執行讀取或寫入操作的執行緒數。例如,某個最初用資料填充並且之後不經常對其進行修改的 collection,因為經常對其進行搜尋(比如搜尋某種目錄),所以這樣的 collection 是使用讀-寫鎖的理想候選者。但是,如果資料更新變得頻繁,資料在大部分時間都被獨佔鎖,這時,就算存在共時性增強,也是微不足道的。更進一步地說,如果讀取操作所用時間太短,則讀-寫鎖實作(它本身就比互斥鎖複雜)的開銷將成為主要的執行成本,在許多讀-寫鎖實作仍然通過一小段程式碼將所有執行緒序列化時更是如此。最終,只有通過分析和測量,才能確定應用程序是否適合使用讀-寫鎖。
儘管讀-寫鎖的基本操作是直截了當的,但實作仍然必須作出許多決策,這些決策可能會影響給定應用程序中讀-寫鎖的效果。這些策略的例子包括:
ReentrantReadWriteLock
,
Lock
,
ReentrantLock
方法摘要 | |
---|---|
Lock |
readLock()
返回用於讀取操作的鎖。 |
Lock |
writeLock()
返回用於寫入操作的鎖。 |
方法詳細資訊 |
---|
Lock readLock()
Lock writeLock()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。