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<>());