我正在查看 Spliterator 的文档,根据它,Spliterator 不是线程安全的:
但是,在其进一步的文件中,其中陈述了与上述陈述相矛盾的陈述:
那么这是否意味着从线程安全集合生成的 Spliterator 将是线程安全的?这样对吗?
最佳答案
不,报告 Spliterator
特性的 CONCURRENT
将具有线程安全源,这意味着即使源被并发修改,它也可以安全地迭代它。但是 Spliterator
本身可能仍然具有不得同时操作的状态。
请注意,您的引用源于对“如何管理源的结构干扰”的描述,而不是关于分离器的一般行为。
这也在 documentation of the CONCURRENT
characteristic itself 中提供:
没有其他的。
所以这些特征的后果小得惊人。报告 Spliterator
或 CONCURRENT
的 IMMUTABLE
永远不会抛出 ConcurrentModificationException
,仅此而已。在所有其他方面,Stream
API 不会识别这些特征之间的差异,因为 Stream
API 从不执行任何源操作,事实上,它实际上并不知道源(除了间接通过 Spliterator
之外),所以它无法进行此类操作,也无法检测是否发生了并发修改。
关于java-8 - Spliterator:线程安全与否?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45458031/