栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

并行流,收集器和线程安全

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

并行流,收集器和线程安全

非并行收集器可以安全地与并行流一起使用吗?从并行流中收集时,我是否应该仅使用并发版本?

collect
并行流的操作中使用非并行收集器是安全的。

在接口的规范中

Collector
,有六个要点的部分是:

对于非并发收集器,必须将结果提供者,累加器或组合器函数返回的所有结果串行地限制在线程中。这使收集可以并行发生,而收集器无需实现任何其他同步。简化实现必须管理输入已正确分区,分区被隔离处理以及仅在累加完成后才进行合并。

这意味着

Collectors
该类提供的各种实现可以与并行流一起使用,即使其中一些实现可能不是并发收集器也是如此。这也适用于您可能实现的任何您自己的非并行收集器。只要您的收集器不会干扰流源,无副作用,与订单无关等,它们就可以安全地与并行流一起使用。

我还建议阅读java.util.stream软件包文档中的Mutable
Reduction
一节。在本节的中间,有一个示例,该示例被声明为可并行化的,但是将结果收集到一个

ArrayList
不是线程安全的内。

这种工作方式是:以非并行收集器结尾的并行流可确保不同的线程始终在中间结果收集的不同实例上运行。这就是为什么收集器具有一个

Supplier
函数的功能,该函数用于创建与线程一样多的中间集合,因此每个线程可以累积到自己的线程中。当要合并中间结果时,它们将在线程之间安全地移交,并且在任何给定时间,只有一个线程将合并任何一对中间结果。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号