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