首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使流减少线程安全?

如何使流减少线程安全?
EN

Stack Overflow用户
提问于 2021-02-22 15:01:25
回答 2查看 631关注 0票数 17

Java提供了一个通用的.reduce(identity, accumulator)方法。

从javadocs中可以很清楚地看出,累加器应该是一个无状态函数。

但是,我有一个关于identity对象的问题,即它应该是线程安全的吗?

让我们假设一个identity是一个java对象,而一个accumulator以一种非原子化的方式修改这个对象,例如accumulator查看identity's状态,然后决定如何精确地修改它的内部状态。很明显,可能会发生多个精简操作同时运行的情况。在这种情况下,出现了几个问题:

  • 这个减少操作应该是identity对象作用域中的原子操作吗?
  • 是否足以使identity对象不可变并在每个identity对象上返回一个新实例?
EN

Stack Overflow用户

发布于 2021-02-22 16:38:04

这是文档所涵盖的,但不是直接的,而是隐含的。

标识值必须是累加器函数的标识。这意味着对于所有的t,accumulator.apply(恒等式,t)等于t

就像您说的那样,一旦identity被修改,即使是以线程安全的方式,上面的规则也会被违反;因此无法保证预期的结果。

对于第二个问题,答案涉及得更多一些。您不必使identity不可变,只要没有人滥用它(通过修改它的内部状态)。当然,immutable在这方面有很大的帮助。

票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66318158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档