最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的ConcurrentHashMap中不能存儲(chǔ)null的原因解析

 更新時(shí)間:2022年07月20日 10:03:27   作者:哪?吒  
眾所周知,在Java中Map可以存儲(chǔ)null,而ConcurrentHashMap不能存儲(chǔ)null值,那么為什么呢?今天通過源碼分析給大家詳細(xì)解讀,感興趣的朋友一起看看吧

眾所周知,在Java中Map可以存儲(chǔ)null,而ConcurrentHashMap不能存儲(chǔ)null值,那么為什么呢?

一、先出源碼出發(fā)

put方法點(diǎn)進(jìn)去~

@throws NullPointerException if the specified key or value is null and this map does not permit null keys or values

可以清晰的看到源碼中規(guī)定,ConcurrentHashMap是不可以存儲(chǔ)null值的。

二、那么究竟這是為什么呢?

可以先具體的了解一下ConcurrentHashMap。

與HashMap一樣,ConcurrentHashMap也是一個(gè)基于散列的Map,但它使用了一種完全不同的加鎖策略來提供更高的并發(fā)性和伸縮性。ConcurrentHashMap并不是將每個(gè)方法都在同一個(gè)鎖上同步并使得每次只能有一個(gè)線程訪問容器,而是使用一種更細(xì)的加鎖機(jī)制來實(shí)現(xiàn)更大程度的共享,這種機(jī)制成為分段鎖。在這種機(jī)制中,任意數(shù)量的讀取線程可以并發(fā)地訪問Map,執(zhí)行讀取操作的線程和執(zhí)行寫入操作的線程可以并發(fā)地訪問Map,并且一定數(shù)量的寫入線程可以并發(fā)地修改Map。ConcurrentHashMap帶來的結(jié)果是,在并發(fā)訪問環(huán)境下將實(shí)現(xiàn)更高的吞吐量,而在單線程環(huán)境中只損失非常小的性能。

ConcurrentHashMap返回的迭代器具有弱一致性,而并非“及時(shí)失敗”。弱一致性的迭代器可以容忍并發(fā)的修改,當(dāng)創(chuàng)建迭代器時(shí)會(huì)遍歷已有的元素,并可以在迭代器被構(gòu)造后將修改操作反映給容器。ConcurrentHashMap返回的迭代器具有弱一致性,而并非“及時(shí)失敗”。弱一致性的迭代器可以容忍并發(fā)的修改,當(dāng)創(chuàng)建迭代器時(shí)會(huì)遍歷已有的元素,并可以在迭代器被構(gòu)造后將修改操作反映給容器。

三、ConcurrentHashMap 作者 Doug Lea 的郵件

對(duì)于 ConcurrentHashMap 不允許插入 null 值的問題,有人問過 ConcurrentHashMap 的作者 Doug Lea,以下是他回復(fù)的郵件內(nèi)容:

The main reason that nulls aren’t allowed in ConcurrentMaps
(ConcurrentHashMaps, ConcurrentSkipListMaps) is that ambiguities that
may be just barely tolerable in non-concurrent maps can’t be
accommodated. The main one is that if map.get(key) returns null, you
can’t detect whether the key explicitly maps to null vs the key isn’t
mapped.In a non-concurrent map, you can check this via
map.contains(key),but in a concurrent one, the map might have changed
between calls.Further digressing: I personally think that
allowingnulls in Maps (also Sets) is an open invitation for programsto
contain errors that remain undetected untilthey break at just the
wrong time. (Whether to allow nulls evenin non-concurrent Maps/Sets is
one of the few design issues surroundingCollections that Josh Bloch
and I have long disagreed about.)It is very difficult to check for
null keys and valuesin my entire application .Would it be easier to
declare somewherestatic final Object NULL = new Object();and replace
all use of nulls in uses of maps with NULL?

-Doug

以上信件的主要意思是,Doug Lea 認(rèn)為這樣設(shè)計(jì)最主要的原因是:不容忍在并發(fā)場景下出現(xiàn)歧義!

到此這篇關(guān)于Java的ConcurrentHashMap中不能存儲(chǔ)null的原因解析的文章就介紹到這了,更多相關(guān)Java ConcurrentHashMap不能存儲(chǔ)null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Graylog做日志收集實(shí)現(xiàn)過程

    SpringBoot整合Graylog做日志收集實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了SpringBoot整合Graylog做日志收集實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java?Chassis3應(yīng)用視角的配置管理技術(shù)解密

    Java?Chassis3應(yīng)用視角的配置管理技術(shù)解密

    這篇文章主要為大家介紹了Java?Chassis3應(yīng)用視角的配置管理相關(guān)的機(jī)制和背后故事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • java中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法

    java中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava中pdf轉(zhuǎn)圖片的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java字符串拼接的五種方法及性能比較分析(從執(zhí)行100次到90萬次)

    Java字符串拼接的五種方法及性能比較分析(從執(zhí)行100次到90萬次)

    字符串拼接一般使用“+”,但是“+”不能滿足大批量數(shù)據(jù)的處理,Java中有以下五種方法處理字符串拼接及性能比較分析,感興趣的可以了解一下
    2021-12-12
  • druid?return行為方法源碼示例解析

    druid?return行為方法源碼示例解析

    這篇文章主要為大家介紹了druid?return行為源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java多線程編程實(shí)現(xiàn)下雪效果

    java多線程編程實(shí)現(xiàn)下雪效果

    這篇文章主要介紹了java多線程編程實(shí)現(xiàn)下雪效果的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 詳解Spring容器的使用流程

    詳解Spring容器的使用流程

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Spring容器的使用流程展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring?AOP?后置處理器使用方式

    Spring?AOP?后置處理器使用方式

    這篇文章主要介紹了Spring?AOP?后置處理器使用方式,文章圍繞主題相關(guān)內(nèi)容展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • java生成彩色附logo二維碼

    java生成彩色附logo二維碼

    這篇文章主要為大家介紹了java生成帶logo的多彩二維碼,比一般二維碼顏色鮮艷,美觀,如何生成二維碼,下面小編為大家分享實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 學(xué)生信息管理系統(tǒng)java版

    學(xué)生信息管理系統(tǒng)java版

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論

都兰县| 黑水县| 甘孜| 林周县| 台安县| 上饶县| 黄浦区| 南阳市| 东乡县| 汉川市| 苏州市| 平江县| 互助| 河北省| 宜兴市| 台北县| 晋城| 松潘县| 丹江口市| 东乡| 黄山市| 台安县| 嘉祥县| 麟游县| 白银市| 许昌市| 榕江县| 尉犁县| 金寨县| 邓州市| 尼玛县| 黄平县| 兴和县| 公主岭市| 韶山市| 文昌市| 梅州市| 屏东县| 新绛县| 赞皇县| 兰州市|