在阅读Java 8 Spliterator的文档时,我遇到了#34;串行线程限制"的概念。 Preciselly文件说:
尽管它们在并行算法中具有明显的实用性,但分裂器却是如此 不期望是线程安全的;相反,并行的实现 使用分裂器的算法应该确保分裂器 仅一次由一个线程使用。这通常很容易实现 通过串行线程限制,这通常是自然的结果 通过递归分解工作的典型并行算法
Q1:通过上面的第一句,我假设在编写Spliterator
的实现时,我应该返回Spliterator的新实例,它将对遍历数据的孤立子集进行操作(这样就无法访问数据子集)通过其他线程)。是吗?
Q2:第二句是什么意思。这是什么"串行线程限制"为什么它是" 典型并行算法的自然结果"?
答案 0 :(得分:3)
Q1:这是正确的,一次只有一个线程应该拥有一个Splititerator。当在例如Splititerator上使用时, trySplit 方法将返回(如果集合可以拆分)一个新的Splititerator,你应该只给一个线程(另一个线程应该处理原来的Splititerator,它现在只包含 trySplit 调用未删除的元素
Q2:串行线程限制意味着您可以安全地将拆分器从一个线程发布到另一个线程,只要拆分器仅限于一个线程