为什么使流并行导致IndexOutOfBoundsException而不是仅产生顺序不同的输出

问题描述 投票:1回答:1

下面的代码工作并产生一个字符串,该字符串是从1开始连接前100个unicode字符的结果。[我正在使用Java 1.8版本]

Stream<Character> chars = Stream.iterate('1', op -> (char)(op + 1));
        StringBuilder value = chars.limit(100).reduce
                (new StringBuilder(""), (s, c) -> s.append(c), (p,d) -> p.append(d) );
        System.out.println(value.toString());

上面的输出是-

123456789:; <=> @ ABCDEFGHIJKLMNOPQRSTUVWXYZ [] ^ _`ABCDEFGHIJKLMNOPQRSTUVWXYZ {|}〜?????????????????????

但是当我按如下所示将字符变成并行流时,我得到了IndexOutOfBoundsException-

        Stream<Character> chars = Stream.iterate('1', op -> (char)(op + 1));
        StringBuilder value = chars.parallel().limit(100).reduce
                (new StringBuilder(""), (s, c) -> s.append(c), (p,d) -> p.append(d) );
        System.out.println(value.toString());

我期望值字符串中字符的顺序会有所不同,因为这是并行流,但是如果顺序无关紧要,则该程序甚至可以用于并行流。但是我收到了IndexOutOfBoundsException。如果使流平行,为什么会出现IndexOutOfBoundsException。

java java-stream reduction
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.