我正在查看 Spliterator 的文档,根据它,Spliterator 不是线程安全的:

但是,在其进一步的文件中,其中陈述了与上述陈述相矛盾的陈述:

那么这是否意味着从线程安全集合生成的 Spliterator 将是线程安全的?这样对吗?

最佳答案

不,报告 Spliterator 特性的 CONCURRENT 将具有线程安全源,这意味着即使源被并发修改,它也可以安全地迭代它。但是 Spliterator 本身可能仍然具有不得同时操作的状态。

请注意,您的引用源于对“如何管理源的结构干扰”的描述,而不是关于分离器的一般行为。

这也在 documentation of the CONCURRENT characteristic itself 中提供:



没有其他的。

所以这些特征的后果小得惊人。报告 SpliteratorCONCURRENTIMMUTABLE 永远不会抛出 ConcurrentModificationException ,仅此而已。在所有其他方面,Stream API 不会识别这些特征之间的差异,因为 Stream API 从不执行任何源操作,事实上,它实际上并不知道源(除了间接通过 Spliterator 之外),所以它无法进行此类操作,也无法检测是否发生了并发修改。

关于java-8 - Spliterator:线程安全与否?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45458031/

10-11 22:26