《併發程式設計》 15 執行緒安全的HashMap

2021-08-08 10:12:17 字數 665 閱讀 7454

眾所周知,hashmap是執行緒不安全的。但是如果需要乙個執行緒按鈕的hashmap我們需要怎麼做的。

其中乙個可行的辦法就是collections.synchronizedmap。如下**就是執行緒安全的hashmap

public static map m = collections.synchronizedmap(new hashmap<>());
說白了,就是給hashmap加鎖,jdk參考**如下

public static mapsynchronizedmap(mapm) 

/*** @serial include

*/private static class synchronizedmapimplements map, serializable

}

這個包裝的hashmap可以滿足執行緒安全的要求。但是,他在高併發的環境中效能表現的不好,無論是對map的讀取或者寫入,都需要獲得munex的鎖,這會導致其他的的執行緒進入等待的狀態。如果併發級別不高,一般也夠用。但是在高併發的環境中,我們必須尋求新的解決方案。

乙個更加專業的hashmap就是concurrenthashmap,他專門為併發進行了優化。

有關concurrenthashmap的實現細節,可以參考下面鎖的優化。

執行緒安全15 併發佇列

併發無阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue無阻塞 無鎖 高效能 無界 執行緒安全,效能優於blockingqueue 不允許null值 併發阻塞佇列 arrayblockingqueue 基於陣列實現的阻塞有界佇列 建立時可指定長度,內部實...

併發程式設計(一) 執行緒安全

1 編寫執行緒安全的 本質上就是管理對狀態的訪問,而且通常都是共享的 可變的狀態。通俗的講,乙個物件的狀態就是它的資料,儲存在狀態變數中,比如例項域或靜態域以及其他附屬物件的域等等。我們討論執行緒安全好像是關於 的,但是我們真正要做的,是在不可控制的併發訪問中保護資料。無論何時,只要多於乙個的執行緒...

Java併發程式設計 執行緒安全問題

1.執行緒安全的概念 當多個執行緒訪問某乙個類 物件或方法 時,這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的.synchronized 可以在任意物件或方法上加鎖,而加鎖的這段 稱為 互斥區 或 臨界區 示例 package com.thread.safety 執行緒安全...