第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Java 8 并行流以原子方式更新從 Map 檢索的元素

使用 Java 8 并行流以原子方式更新從 Map 檢索的元素

暮色呼如 2021-06-08 13:38:12
我有一個并行流,其中我使用 Map 來改變元素。Map<Long, List<MyItem>> hashmap = foo.getMap();itemStream.parallel()  .filter(Objects::nonNull)  .forEach(item -> setProperties(hashmap, item));方法“setProperties()”獲取地圖和項目,并使用項目執(zhí)行獲取,然后設(shè)置項目的一些屬性。我想要的是以原子方式完成獲取/屬性設(shè)置。這樣兩個線程就不能對同一個鍵執(zhí)行 get 并且屬性更新是交錯的。private void setProperties(Map<Long, List<Item>> map, Item item) {    long id = item.getID();    List<Object1> items = map.get(id);    for (Object1 ob : items) {            ob.setId(item.getFloorId());            ob.setPath(item.getPath());            ob.setTypeName(item.getTypeName());    }}也有點擔(dān)心延遲命中以及這種并行化是否真的比現(xiàn)有的單線程方法有好處。
查看完整描述

1 回答

?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊

同步地圖或從中獲取沒有任何好處,因為地圖沒有被改變,所以沒有競爭條件。


您需要同步更新,以便它們一次性發(fā)生:


for (Object1 ob : items) {

    synchronized (ob) {

        ob.setId(item.getFloorId());

        ob.setPath(item.getPath());

        ob.setTypeName(item.getTypeName());

    }

}

這對性能的影響很小,因為現(xiàn)在同步引入的開銷非常小,并且只有在操作相同的Item時才會阻塞。


查看完整回答
反對 回復(fù) 2021-06-10
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號