回答
ConcurrentHashMap
使用多個桶來存儲數據。這樣可以避免讀鎖,並且極大地提高了性能,優於HashTable
。兩者都是線程安全的,但在ConcurrentHashMap
中有明顯的性能優勢。
當您從ConcurrentHashMap
使用get()
讀取時,沒有鎖定,與所有操作都簡單同步的HashTable
相反。 HashTable
是在舊版本的Java中發佈的,而ConcurrentHashMap
是java 5+的東西。
HashMap
是在單線程應用程序中使用的最佳選擇。
還有'ConcurrentHashMap.putIfAbsent()',它在舊的' Hashtable'。當你只從'ConcurrentHashMap'中讀取時,就沒有鎖定,與所有操作都簡單同步的'Hashtable'相反。 –
@FrankPavageau在原始答案中添加了非常有用的評論。 – Algorithmist
的ConcurrentHashMap和Hashtable鎖定機構
Hashtable
是屬於集合框架;ConcurrentHashMap
屬於Executor框架。Hashtable
使用單鎖爲整個數據。ConcurrentHashMap
使用段級別上的多個鎖(默認爲16)而不是對象級別,即整個Map
。ConcurrentHashMap
鎖定僅適用於更新。在檢索的情況下,它允許完全併發,檢索反映最近完成的更新操作的結果。所以讀取可以非常快速地進行,而寫入則通過鎖定來完成。ConcurrentHashMap
不會拋出ConcurrentModificationException
如果一個線程試圖修改它,而另一個線程迭代它並且不允許空值。ConcurrentHashMap
返回Iterator
,它對併發修改是安全的(即迭代器將複製內部數據結構)。ConcurrentHashMap
使用數據庫碎片邏輯(Segment<K, V>[] segments
)被稱爲併發級別,即將所述數據分成碎片(段)比穿每個碎片(段)鎖而不是把單個鎖定爲整個數據(Map
)。默認值是16
要了解的ConcurrentHashMap技術上更請看看這個link
以下類推可以幫助你只有理解這個概念(沒有邏輯)
- 假設
Hashtable
和ConcurrentHashMap
是兩種家庭。 Hashtable
鎖住家的大門。ConcurrentHashMap
鎖定特定的房門而不是主門。
哪個更有效的線程應用程序?
ConcurrentHashMap
對於線程應用程序更高效。
- 1. Hashtable,ConcurrentHashMap和Data Visibility
- 2. Hashtable和ConcurrentHashMap之間的區別
- 3. Hashtable的ConcurrentHashMap的具體用法
- 4. Java中的ConcurrentHashMap?
- 5. concurrenthashmap java
- 6. Java ConcurrentHashmap問題
- 7. Java - ThreadLocal vs ConcurrentHashMap
- 8. AndEngine的Java Hashtable
- 9. Java HashMap/Hashtable和編號
- 10. java中的多線程HashTable
- 11. WebService中的Hashtable更新java
- 12. .Net Hashtable,Java Hashtable和HashMap之間的差異
- 13. Java ConcurrentHashMap損壞值
- 14. Java Hashtable問題
- 15. 在Java中的ConcurrentHashmap中計算增量
- 16. 有什麼情況下hashtable比concurrenthashmap更好?
- 17. 因爲我們有ConcurrentHashMap,我們需要Hashtable嗎?
- 18. 排序在Java的ConcurrentHashMap
- 19. 的ConcurrentHashMap和線程
- 20. 在java中可視化HashTable
- 21. 迷茫中的HashMap和Hashtable
- 22. Servlet中的ConcurrentHashMap
- 23. 序列化HashTable,Java
- 24. Java 8 ConcurrentHashMap初始化
- 25. ConcurrentHashMap和putAll()方法
- 26. Java中的HashTable過時了嗎?
- 27. 的ConcurrentHashMap和線程安全
- 28. HashMap和ConcurrentHashMap的INTERAL工作
- 29. 分割中的ConcurrentHashMap
- 30. 有一個C#等價的Java的ConcurrentHashMap
可能會有所幫助http://www.codercorp.com/blog/java/why-concurrenthashmap-is-better-than-hashtable-and-just-as-good-hashmap.html – kosa
對於非線程應用程序,使用'HashMap'。 –
另請參閱http://stackoverflow.com/a/40878/632951瞭解更多信息。 – Pacerier