剛剛開始接觸Java,看到Hashmap是線程不安全的,不太理解。從某種角度來講,只要有鎖的機制,不是應該所有的數據結構都可以通過鎖來實現線程安全么~為什么Hashmap是線程不安全的,是指Hashmap的實現里不帶鎖機制的意思么~希望能夠得到各位的回答:-\
2 回答

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
HashMap
的實現里確實沒有鎖的機制,因此它是線程不安全的。
另外你說的也沒錯,只要有鎖的機制,可以通過鎖實現線程安全,你可以在讀寫HashMap
對象的時候加鎖,以保障這個對象的線程安全,但不代表HashMap
本身是線程安全的,因為是外力(你自己加的鎖)使然。
為啥不在HashMap內部加鎖讓它變成線程安全?
這樣會增加單線程訪問的資源消耗,即使沒有多線程訪問,也要每次檢查、加鎖、解鎖。
實際上有線程安全的Map,Collections
里面有個靜態方法可以返回一個線程安全版本的HashMap
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<K,V>(m); }
另外java5之后還提供了ConcurrentHashMap
類,提供更高效的線程安全操作。
添加回答
舉報
0/150
提交
取消