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