1. 程式人生 > >2種辦法讓HashMap執行緒安全

2種辦法讓HashMap執行緒安全

HashMap不是執行緒安全的,往往在寫程式時需要通過一些方法來回避.其實JDK原生的提供了2種方法讓HashMap支援執行緒安全.

方法一:通過Collections.synchronizedMap()返回一個新的Map,這個新的map就是執行緒安全的. 這個要求大家習慣基於介面程式設計,因為返回的並不是HashMap,而是一個Map的實現.

方法二:重新改寫了HashMap,具體的可以檢視java.util.concurrent.ConcurrentHashMap. 這個方法比方法一有了很大的改進.

下面對這2中實現方法從各個角度進行分析和比較.

實現原理 鎖機制的不同 如何得到/釋放鎖 優缺點

1)實現原理

方法一原理:

通過Collections.synchronizedMap()來封裝所有不安全的HashMap的方法,就連toString, hashCode都進行了封裝. 封裝的關鍵點有2處,1)使用了經典的synchronized來進行互斥, 2)使用了代理模式new了一個新的類,這個類同樣實現了Map介面.

private static class SynchronizedMap