场景是这样的:两个对象往一个 Map 里循环写入,另外一个对象偶尔读一次,写的频率比读的频率高很多。 希望实现的是读的时候暂停写入。CocurrentHashMap 和 ReadWriteLock 各有什么优劣吗?
Map
CocurrentHashMap
ReadWriteLock
学习是最好的投资!
應該用ConcurrentHashMap。
ConcurrentHashMap
ReadWriteLock適用於讀線程遠遠多於寫線程的情況下,而且一般是有寫的情況下讀會阻塞--這樣下來甚至不如一般的鎖。
從簡化程式設計模型來看,應該用 ConcurrentHashMap,用它直接產生 Map 的實例即可。而使用鎖機制,你需要自己管理這些鎖的狀態。
從效能來看,同樣應該用 ConcurrentHashMap,因為它內部已經對讀寫操作進行了分塊最佳化,在大多數情況下,讀寫可以同時進行。你自己很難實現得更有效率。具體細節可見這篇文章
應該用
ConcurrentHashMap
。ReadWriteLock
適用於讀線程遠遠多於寫線程的情況下,而且一般是有寫的情況下讀會阻塞--這樣下來甚至不如一般的鎖。從簡化程式設計模型來看,應該用
ConcurrentHashMap
,用它直接產生Map
的實例即可。而使用鎖機制,你需要自己管理這些鎖的狀態。從效能來看,同樣應該用
ConcurrentHashMap
,因為它內部已經對讀寫操作進行了分塊最佳化,在大多數情況下,讀寫可以同時進行。你自己很難實現得更有效率。具體細節可見這篇文章