java8_CurrentHashMap更新

標(biāo)簽:java

CurrentHashMap更新

提要:

  • CurrentHashMap的線程安全罗丰?
    • 多個(gè)線程對(duì)currentHashMap讀取的時(shí)候不會(huì)破壞其數(shù)據(jù)結(jié)構(gòu)比默,
      • 也就是說讀寫的時(shí)候是線程安全的;
    • 但是操作數(shù)據(jù)的順序需要額外的同步處理漠趁,保證同步代碼操作的原子性

原子更新

lambda表達(dá)式函數(shù)表示要執(zhí)行的同步代碼熏兄,
使用compute原子更新,保證(獲取-計(jì)算-更新)同步代碼的原子性

private ConcurrentHashMap<String,Integer> map=new ConcurrentHashMap<>();
public CurrentHashMapTest(){
    map.put("55555",5);
    map.put("666666",6);
    map.put("7777777",7);
}

/**
 * java 8提供了很多用于原子更新的方法
 * 函數(shù)運(yùn)行時(shí)其他一些更新映射的操作可能會(huì)被阻塞
 */
private void atomicUpdate(){
    String word="55555";
    //接受一個(gè)函數(shù)叭莫,參數(shù)為鍵及其關(guān)聯(lián)的值,若不存在鍵烁试,則值為null雇初;
    //函數(shù)返回更新后的值;
    map.compute(word,(k,v)->{
        return null==v?1:v+1;
    });
    //存在時(shí)才更新值减响,參數(shù)為value
    map.computeIfPresent(word,(k,v)->v+1);
    //不存在時(shí)才計(jì)算新值靖诗,參數(shù)為key
    map.computeIfAbsent(word,(k)->1);
    //k不存在郭怪,返回初始值;
    // k存在呻畸,調(diào)用函數(shù)對(duì)初始值和舊值計(jì)算返回
    map.merge(
            word,//key
            1,//初始
            (existingValue,newValue)->existingValue+newValue
    );
}

批量數(shù)據(jù)操作

返回結(jié)果的時(shí)候除非可以確保沒有其他值修改移盆,否則應(yīng)該作為近似值
(tip:可能在你計(jì)算到值還未返回的時(shí)候已經(jīng)有其他線程修改了數(shù)據(jù))
(如何保證悼院?鎖定數(shù)據(jù))

private void batchOperation(){
    //search()查找,reduce()聚合伤为,foreach()遍歷應(yīng)用
    //以上三個(gè)方法都有針對(duì)key,value,k&v,entry四個(gè)版本
    //第一個(gè)參數(shù)為并行閥值,超過該數(shù)量則并行處理
    //search()方法查找到第一個(gè)則返回
    map.search(1,(k,v)->{
        if(k.endsWith("5")&&v>4){
            return k;
        }else{
            return null;
        }
    });
    //foreach()遍歷數(shù)據(jù)据途,應(yīng)用函數(shù)處理
    //1.對(duì)每個(gè)數(shù)據(jù)項(xiàng)默認(rèn)應(yīng)用
    map.forEach(1,(k,v)->{
        LOGGER.info(k+"`s length is"+v);
    });
    //2.先使用轉(zhuǎn)換器函數(shù)绞愚,再對(duì)結(jié)果應(yīng)用消費(fèi)者函數(shù)
    map.forEach(1,
            (k,v)->k+"`s length is"+v,//轉(zhuǎn)換器可作為一個(gè)過濾器,如果返回null颖医,則不應(yīng)用消費(fèi)者函數(shù)
            (str)->LOGGER.info(str));
    //reduce()對(duì)數(shù)據(jù)執(zhí)行累加操作位衩,返回結(jié)果
    map.reduceValues(1,
            v->Integer.valueOf(v),//轉(zhuǎn)換器
            Integer::sum);//聚合操作
    //reduce***ToLong/Integer/Double(),提供int,long熔萧,double原始類型的輸出糖驴;
}

線程安全的Set

/**
 * 獲取一個(gè)大的,線程安全的Set
 */
private void setView(){
    //返回一個(gè)線程安全的Set,實(shí)際上是對(duì)ConcurrentHashMap<K,Boolean>的封裝
    Set<String> keys=map.newKeySet();
    Set<String> keySet=ConcurrentHashMap.<String>newKeySet();
    //delete,無法添加add(因?yàn)闆]有值)
    keys.remove("55555");
    //參數(shù)提供了一個(gè)默認(rèn)值佛致,如果添加一個(gè)鍵贮缕,對(duì)應(yīng)的值不存在,則使用默認(rèn)值
    keys=map.keySet(1);
    //add
    keys.add("7777777");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俺榆,一起剝皮案震驚了整個(gè)濱河市感昼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罐脊,老刑警劉巖定嗓,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異萍桌,居然都是意外死亡宵溅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門上炎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恃逻,“玉大人,你說我怎么就攤上這事反症⌒量椋” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵铅碍,是天一觀的道長(zhǎng)润绵。 經(jīng)常有香客問我,道長(zhǎng)胞谈,這世上最難降的妖魔是什么尘盼? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任憨愉,我火速辦了婚禮,結(jié)果婚禮上卿捎,老公的妹妹穿的比我還像新娘配紫。我一直安慰自己,他們只是感情好午阵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布躺孝。 她就那樣靜靜地躺著,像睡著了一般底桂。 火紅的嫁衣襯著肌膚如雪植袍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天籽懦,我揣著相機(jī)與錄音于个,去河邊找鬼。 笑死暮顺,一個(gè)胖子當(dāng)著我的面吹牛厅篓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捶码,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼羽氮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了宙项?” 一聲冷哼從身側(cè)響起乏苦,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尤筐,沒想到半個(gè)月后汇荐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盆繁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年掀淘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油昂。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡革娄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冕碟,到底是詐尸還是另有隱情拦惋,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布安寺,位于F島的核電站厕妖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挑庶。R本人自食惡果不足惜言秸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一软能、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧举畸,春花似錦查排、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至合是,卻和暖如春了罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聪全。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辅辩,地道東北人难礼。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像玫锋,于是被迫代替她去往敵國(guó)和親蛾茉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在撩鹿,面了一些公司谦炬,掛了不少,但最終還是拿到小米节沦、百度键思、阿里、京東甫贯、新浪吼鳞、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,274評(píng)論 11 349
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • TKT劍橋英語教學(xué)能力認(rèn)證考試教程 Unit 11 The role of error & Unit 28 cat...
    歐悅閱讀 907評(píng)論 0 0
  • 朋友是個(gè)母胎單身二十余年的直男,發(fā)誓不找到心目中天仙一樣不食人間煙火的另一半渴逻,寧愿繼續(xù)單身疾党。 遇到一見鐘情,非她不...
    有友友閱讀 1,130評(píng)論 0 0
  • 今天是教師節(jié)惨奕,我在微信中看到廖昌永演唱的《老師我總是想起你》他情真意切的歌聲表達(dá)了對(duì)老師的感謝雪位,唱到動(dòng)情處淚流滿面...
    朵朵頤閱讀 164評(píng)論 0 1