HashMap的非執行緒安全例子

2021-08-25 04:31:32 字數 487 閱讀 4621

執行緒一在12:12:10put乙個meetingkey, meetingstatus(123859963,inprogress)

執行緒二在12:12:11put乙個meetingkey,(123859963,close)

而concurrenthashmap不存在這個問題,它使用了鎖分離技術,對於不同的hash值,可以併發的寫,對於相同的hash值,對映在同乙個segment上,所有落在這個segment上的資料,是由有讀寫鎖進行控制的。

然而concurrenthashmap也不能保證強一致性,所謂的強一致性指的是,讀者總是能夠讀到寫者最新修改後的資料,而最終一致性指的是讀者在某個最終狀態能夠讀到寫者寫進去的資料,舉例如下:

concurrenthashmap讀和寫沒有使用讀寫鎖進行互斥,當thread1讀(123859963,inprogress),thread2 put了新的資料(123859963,close),而當讀操作完成時,依然讀到的是老的資料,這個就是不能讀到最新修改的資料。

集合 執行緒安全的HashMap

一 一般模式下執行緒安全的hashmap 預設情況常用的hashmap都是執行緒不安全的,在多執行緒的環境下使用,常常會造成不可預知的,莫名其妙的錯誤。那麼,我們如何實現乙個執行緒安全的hashmap呢?其中乙個可行的方式是使用collectons.synchronizedmap 方法來包裝我們的h...

HashMap是執行緒安全的嗎?

答,不是。雜湊碰撞或擴容導致。還有兩處可能不安全 在擴容的時候插入資料,有可能會把新插入的覆蓋住 在擴容的時候刪除資料,會刪除不了。如果我在擴容時,在資料從舊陣列複製到新陣列過程中,這時候某個執行緒插入一條資料,這時候是插入到新陣列中,但是在資料複製過程中,hashmap是沒有檢查新陣列上的位置是否...

hashMap的執行緒不安全

hashmap是非執行緒安全的,表現在兩種情況下 1 擴容 t1執行緒對map進行擴容,此時t2執行緒來讀取資料,原本要讀取位置為2的元素,擴容後此元素位置未必是2,則出現讀取錯誤資料。2 hash碰撞 兩個執行緒新增元素發生hash碰撞,都要將此元素新增到鍊錶的頭部,則會發生資料被覆蓋。詳情 ha...