亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

安全的Map線程有哪些

發布時間:2021-12-14 16:01:06 來源:億速云 閱讀:323 作者:iii 欄目:大數據

這篇文章主要介紹“安全的Map線程有哪些”,在日常操作中,相信很多人在安全的Map線程有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”安全的Map線程有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

HashMap線程安全的嗎?

Java中平時用的最多的Map集合就是HashMap了,它是線程不安全的。

看下面兩個場景:

1、當用在方法內的局部變量時,局部變量屬于當前線程級別的變量,其他線程訪問不了,所以這時也不存在線程安全不安全的問題了。

2、當用在單例對象成員變量的時候呢?這時候多個線程過來訪問的就是同一個HashMap了,對同個HashMap操作這時候就存在線程安全的問題了。

安全的Map線程有哪些

線程安全的Map

為了避免出現場景2的線程安全的問題,不能使用HashMap作為成員變量,要尋求使用線程安全的Map,下面來總結下有哪些線程安全的Map呢?

1、HashTable

private Map<String, Object> map = new Hashtable<>();

來看看HashTable的源碼

安全的Map線程有哪些

安全的Map線程有哪些

HashTable的get/put方法都被synchronized關鍵字修飾,說明它們是方法級別阻塞的,它們占用共享資源鎖,所以導致同時只能一個線程操作get或者put,而且get/put操作不能同時執行,所以這種同步的集合效率非常低,一般不建議使用這個集合。

2、SynchronizedMap

private Map<String, Object> map = Collections.synchronizedMap(new HashMap<String, Object>());

這種是直接使用工具類里面的方法創建SynchronizedMap,把傳入進行的HashMap對象進行了包裝同步而已,來看看它的源碼。

安全的Map線程有哪些

這個同步方式實現也比較簡單,看出SynchronizedMap的實現方式是加了個對象鎖,每次對HashMap的操作都要先獲取這個mutex的對象鎖才能進入,所以性能也不會比HashTable好到哪里去,也不建議使用。

3、ConcurrentHashMap - 推薦

private Map<String, Object> map = new ConcurrentHashMap<>();

這個也是最推薦使用的線程安全的Map,也是實現方式最復雜的一個集合,每個版本的實現方式也不一樣,在jdk8之前是使用分段加鎖的一個方式,分成16個桶,每次只加鎖其中一個桶,而在jdk8又加入了紅黑樹和CAS算法來實現。

安全的Map線程有哪些

雖然實現起來很復雜,但使用起來也是非常簡單的,在java面試中問的頻率也非常高,最重要的是性能要比上面兩種同步方式要快太多,推薦使用。

到此,關于“安全的Map線程有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

map
AI

蒙自县| 鹤峰县| 邮箱| 乌审旗| 吴桥县| 泌阳县| 临颍县| 武安市| 平山县| 江油市| 扎赉特旗| 丰都县| 绥化市| 九寨沟县| 营口市| 赤水市| 三原县| 迁西县| 珲春市| 类乌齐县| 高雄县| 宜春市| 水城县| 古浪县| 万年县| 固镇县| 龙胜| 永昌县| 津市市| 特克斯县| 汉中市| 盐亭县| 济南市| 襄垣县| 喀什市| 罗甸县| 海淀区| 梁山县| 社会| 萍乡市| 巫溪县|