java.lang.ArrayIndexOutOfBoundsException:当使用并行流向列表添加元素时

java.lang.ArrayIndexOutOfBoundsException:当使用并行流向列表添加元素时,java,java-stream,Java,Java Stream,我正在努力优化csv文件的一些处理,因此试图加快一些Jackson实现。 因此,我: List<T> testResults=new ArrayList(); Stream<T> testStream= Streams.stream(TestIterator); testStream.parallel().forEach(p->testResults.add(p)); 你知道怎么回事吗?如果我删除“并行”,它可以工作,但速度非常慢。不是线程安全的实现。一种解决方案

我正在努力优化csv文件的一些处理,因此试图加快一些Jackson实现。 因此,我:

List<T> testResults=new ArrayList();
Stream<T> testStream= Streams.stream(TestIterator);
testStream.parallel().forEach(p->testResults.add(p));
你知道怎么回事吗?如果我删除“并行”,它可以工作,但速度非常慢。

不是线程安全的实现。一种解决方案是用以下材料包装:

返回由指定列表支持的同步(线程安全)列表

List testResults=Collections.synchronizedList(new ArrayList());

更好的方法是使用惯用的解决方案:
List testResults=testStream.parallel().collect(Collectors.toList())
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 360145
at java.util.ArrayList.add(Unknown Source)
at xml_test.opencsv.App.lambda$1(App.java:85)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachTask.compute(Unknown Source)
at java.util.concurrent.CountedCompleter.exec(Unknown Source)
at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
at java.util.concurrent.ForkJoinTask.doInvoke(Unknown Source)
at java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(Unkno
List<T> testResults = Collections.synchronizedList(new ArrayList<>());