热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Java8并行流更新从Map原子检索的元素

如何解决《使用Java8并行流更新从Map原子检索的元素》经验,为你挑选了1个好方法。

我有一个并行流,我正在使用Map来改变元素.

Map> hashmap = foo.getMap();

itemStream.parallel()
  .filter(Objects::nonNull)
  .forEach(item -> setProperties(hashmap, item));

方法'setProperties()'获取map和item,并执行get using item,然后设置项的一些属性.

我想要的是获取/属性设置以原子方式完成.这样两个线程就无法对相同的密钥执行get操作并且交换属性更新.

private void setProperties(Map> map, Item item) {
    long id = item.getID();
    List items = map.get(id);
    for (Object1 ob : items) {
            ob.setId(item.getFloorId());
            ob.setPath(item.getPath());
            ob.setTypeName(item.getTypeName());
    }
}

还有点关注延迟命中以及这种并行化是否真的比现有的单线程方法更有优势.



1> Bohemian..:

同步地图或从中获取它没有任何好处,因为地图没有被改变,所以没有竞争条件.

您需要同步更新,以便它们一次性发生:

for (Object1 ob : items) {
    synchronized (ob) {
        ob.setId(item.getFloorId());
        ob.setPath(item.getPath());
        ob.setTypeName(item.getTypeName());
    }
}

这对性能影响很小,因为这些天同步引入的开销很小,只有在操作相同的项目时才会阻塞.


你能否说明一下"这几天同步引入了很少的开销"?我想知道更多.
推荐阅读
author-avatar
天飞的鹊桥会大美女
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有