【发布时间】:2018-01-09 12:19:26
【问题描述】:
我正在查看 Spliterator 的文档,根据它,Spliterator 不是线程安全的:
尽管在并行算法中有明显的实用性,但分离器并不期望是线程安全的;相反,使用拆分器的并行算法的实现应确保拆分器一次仅由一个线程使用。这通常很容易通过串行线程限制实现,这通常是通过递归分解工作的典型并行算法的自然结果。
但是,在其进一步的文档中,与上述声明相矛盾:
可以通过以下方式管理源的结构干扰(按合意性递减的大致顺序):
源管理并发修改。 例如,java.util.concurrent.ConcurrentHashMap 的键集是一个并发源。从源创建的 Spliterator 报告了 CONCURRENT 的特征。
那么这是否意味着从线程安全集合生成的 Spliterator 将是线程安全的?对吗?
【问题讨论】:
-
我认为这两个陈述没有矛盾:
Spliterator不需要是线程安全的,但它可以是线程安全的。如果它是线程安全的,它可能会报告它具有CONCURRENT特征。
标签: java-8 iterator thread-safety java-stream spliterator