爲何HashMap是線程不安全的?安全
HashMap在併發執行put操做時會引發死循環,致使CPU利用率接近100%。由於多線程會致使HashMap的Node鏈表造成環形數據結構,一旦造成環形數據結構,Node的節點就永遠不爲空,就會在獲取Node的時候產生死循環。數據結構
如何線程安全的使用HashMap?多線程
HashTable是線程安全的,效率慢,慢在那個方面呢?——主要就是在put和get方法時,須要等待鎖。併發
線程安全的使用HashMap的意義在於,提升訪問的效率;又要線程安全,又要提升效率的方法有兩個,一個是Synchronized、一個是ConcurrentHashMap;Synchronized整體上比ConcurrentHashMap差一點,因此主要是使用ConcurrentHashMap來實現線程安全。.net
多併發狀況下HashMap是否還會產生死循環?線程
新版本的JDK8改進以後修復了HashMap在多併發的狀況下不會產生死循環的問題,但又出現了數據丟失的問題(參考:https://blog.csdn.net/u010412719/article/details/52049347)blog