日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么?

發布時間:2023/11/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ConcurrentHashMap和Collections.synchronizedMap(Map)的區別是什么?

我有一個會被多個線程同時修改的Map

在Java的API里面,有3種不同的實現了同步的Map實現

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

據我所知,HashTable 已經是一個很老的實現了(擴展了已經過時的字典類)。后來為了適配Map接口進行了調整,它存在著嚴重的伸縮性問題,已經不鼓勵在新項目里面使用了

但是關于其他的兩個呢?ConcurrentHashMap和Collections.synchronizedMap(Map)的區別是什么?分別適合什么場景呢?

回答一

╔═══════════════╦═══════════════════╦═══════════════════╦═════════════════════╗ ║ Property ║ HashMap ║ Hashtable ║ ConcurrentHashMap ║ ╠═══════════════╬═══════════════════╬═══════════════════╩═════════════════════╣ ║ Null ║ allowed ║ not allowed ║ ║ values/keys ║ ║ ║ ╠═══════════════╬═══════════════════╬═════════════════════════════════════════╣ ║ Thread-safety ║ ║ ║ ║ features ║ no ║ yes ║ ╠═══════════════╬═══════════════════╬═══════════════════╦═════════════════════╣ ║ Lock ║ not ║ locks the whole ║ locks the portion ║ ║ mechanism ║ applicable ║ map ║ ║ ╠═══════════════╬═══════════════════╩═══════════════════╬═════════════════════╣ ║ Iterator ║ fail-fast ║ weakly consistent ║ ╚═══════════════╩═══════════════════════════════════════╩═════════════════════╝

關于鎖的機制,HashTable鎖一個對象, ConcurrentHashMap只鎖一個桶

回答二

按照你的需求,使用ConcurrentHashMap吧。它允許Map被多個線程并發修改并且是非阻塞的。 Collections.synchronizedMap(map) 創建的是一個阻塞的Map,會降低性能的,盡管可以保持一致性(使用正確的話)

用第二個選擇的話,你就需要保證數據的一致性,每一個線程都需要有一個map的最新的視圖。如果性能是至關重要的話,那就用第一種,每個線程只能插入數據到map,并且讀取的頻率會更低。

回答三

ConcurrentHashMap是更好的,如果你可以使用到的話,因為它至少需要Java5版本

它設計的初衷就是多線程情況下的高伸縮性。當只有一個線程使用的話,性能不會太好的,但是多線程使用這個map的時候就好得多了。

我找到一個博客復制了一個表格,來自一本我很推薦的名叫Java Concurrency In Practice的優秀書籍

Collections.synchronizedMap只有在你需要用其他特性去包裝一個map的時候,它才有意義,例如一些排序的map,像treemap那種。

文章翻譯自Stack Overflow:https://stackoverflow.com/questions/510632/whats-the-difference-between-concurrenthashmap-and-collections-synchronizedmap

總結

以上是生活随笔為你收集整理的ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。