java.lang.ArrayIndexOutOfBoundsException:リストに要素を追加するために、並列ストリームを使用して

user2557930:

したがって、私はいくつかのジャクソンの実施を加速しようとすると、CSVファイルのいくつかの処理を最適化するために働いています。ので、私は持っています:

List<T> testResults=new ArrayList();
Stream<T> testStream= Streams.stream(TestIterator);
testStream.parallel().forEach(p->testResults.add(p));

そしてここで私が得ます:

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

任意のアイデアをいただきました!が起こっていますか?私は「パラレル」を削除した場合、それは動作しますが、非常に遅いです。

Eng.Fouad:

ArrayListスレッドセーフな実装ではありません。一つの解決策はでそれをラップすることですCollections.synchronizedList()

戻り値指定されたリストに連動する同期(スレッドセーフな)リスト。

List<T> testResults = Collections.synchronizedList(new ArrayList<>());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=19180&siteId=1