Java Spliterator.CONCURRENT 属性及代码示例

CONCURRENT 表示并发的特征值, 表示遇到的每一对元素 x,  y 都有 !x.equals(y) 的特征值.

定义

static final int CONCURRENT

说明

顶级的 Spliterator 不应该同时报告 CONCURRENTSIZED,因为有限的大小(如果已知)可能会在遍历过程中并发修改源的时候发生变化. 这样的 Spliterator 是不一致的, 也并不能对该 Spliterator 做任何计算上的保证. 如果子拆分大小已知, 且在遍历时没有反映对源的添加或删除, 那么子拆分器可能会报告 SIZED.

顶级 Spliterator 不应该同时报告 CONCURRENTIMMUTABLE, 因为它们是互斥的. 这样的 Spliterator 是不一致的, 也并不能对该 Spliterator 做任何计算上的保证. 如果遍历时没有反映对源的添加或删除, 子拆分器可能会报告 IMMUTABLE.

注意事项

API注意:

大多数并发集合都维持一致性策略, 保证 Spliterator 构造点存在的元素的准确性, 但可能无法反映后续的添加或删除.

示例

一个具备CONCURRENT特征的可拆解迭代器的示例

package com.yi21.spliterator;

import java.util.List;
import java.util.Spliterator;
import java.util.concurrent.ConcurrentLinkedDeque;

public class Yi21SpliteratorCONCURRENT {

    public static void main(String[] args) {

        ConcurrentLinkedDeque<String> deque = new ConcurrentLinkedDeque<>();
        deque.addAll(List.of("Hello", "World", "21yi"));
        Spliterator<String> spliterator = deque.spliterator();
        System.out.println("spliterator 是否具备 CONCURRENT 特征 ? "
            + spliterator.hasCharacteristics(Spliterator.CONCURRENT));
        System.out.println("spliterator 是否具备 SIZED 特征 ? "
            + spliterator.hasCharacteristics(Spliterator.SIZED));
        System.out.println("spliterator 是否具备 IMMUTABLE 特征 ? "
            + spliterator.hasCharacteristics(Spliterator.IMMUTABLE));

    }

}

执行结果为 :

spliterator 是否具备 CONCURRENT 特征 ? true
spliterator 是否具备 SIZED 特征 ? false
spliterator 是否具备 IMMUTABLE 特征 ? false