2 回答

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