搜尋

首頁  >  問答  >  主體

java - 读少写多的条件下 ConcurrentHashMap 和 ReadWriteLock 的选择

场景是这样的:两个对象往一个 Map 里循环写入,另外一个对象偶尔读一次,写的频率比读的频率高很多。
希望实现的是读的时候暂停写入。
CocurrentHashMapReadWriteLock 各有什么优劣吗?

PHPzPHPz2767 天前1166

全部回覆(2)我來回復

  • 阿神

    阿神2017-04-17 11:47:10

    應該用ConcurrentHashMap

    ReadWriteLock適用於讀線程遠遠多於寫線程的情況下,而且一般是有寫的情況下讀會阻塞--這樣下來甚至不如一般的鎖。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:47:10

    從簡化程式設計模型來看,應該用 ConcurrentHashMap,用它直接產生 Map 的實例即可。而使用鎖機制,你需要自己管理這些鎖的狀態。

    從效能來看,同樣應該用 ConcurrentHashMap,因為它內部已經對讀寫操作進行了分塊最佳化,在大多數情況下,讀寫可以同時進行。你自己很難實現得更有效率。具體細節可見這篇文章

    回覆
    0
  • 取消回覆