[ https://issues.apache.org/jira/browse/CSV-318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17949826#comment-17949826 ]
Gary D. Gregory commented on CSV-318: ------------------------------------- [~tupari] Thank you for your report. The deadlock occurs because {{CSVPrinter.print(Object)}} is synchronized and the parallel stream is uses the fork-join framework. Please see {{JiraCsv318Test}}. I'll need to think about this one some more... > printRecord() hangs if fed a parallel stream > -------------------------------------------- > > Key: CSV-318 > URL: https://issues.apache.org/jira/browse/CSV-318 > Project: Commons CSV > Issue Type: Bug > Components: Printer > Affects Versions: 1.14.0 > Environment: {color:#000000}openjdk version "21.0.6" > 2025-01-21{color}{color:#000000} {color} > {color:#000000}OpenJDK Runtime Environment (Red_Hat-21.0.6.0.7-1) (build > 21.0.6+7){color}{color:#000000} {color} > {color:#000000}OpenJDK 64-Bit Server VM (Red_Hat-21.0.6.0.7-1) (build > 21.0.6+7, mixed mode, sharing){color} > {color:#000000} {color} > Reporter: Joseph Shraibman > Priority: Major > > {code:java} > import org.apache.commons.csv.CSVFormat; > import org.apache.commons.csv.CSVPrinter; > import org.junit.jupiter.api.Test; > import java.io.ByteArrayOutputStream; > import java.io.IOException; > import java.io.PrintWriter; > public class CommonsCsvTest { > @Test > void testWithParStream() throws IOException { > ByteArrayOutputStream baos = new ByteArrayOutputStream(); > try(CSVPrinter printer = new CSVPrinter(new PrintWriter(baos), > CSVFormat.DEFAULT)){ > printer.printRecord(java.util.stream.Stream.of("col a", "col b", > "col c").parallel()); > } > } > @Test > void testWithSeqStream() throws IOException { > ByteArrayOutputStream baos = new ByteArrayOutputStream(); > try(CSVPrinter printer = new CSVPrinter(new PrintWriter(baos), > CSVFormat.DEFAULT)){ > printer.printRecord(java.util.stream.Stream.of("col a", "col b", > "col c")); > } > } > } > {code} > A simple workaround is to call sequential() on any passed in Stream. > I don't know why this is happening. At first I thought it must be a problem > with the underlying Stream implementation but this code has no problem: > > {code:java} > @Test > void testJavaStream(){ > java.util.stream.Stream.of("col a", "col b", "col c").parallel() > .forEachOrdered(System.out::println); > }{code} -- This message was sent by Atlassian Jira (v8.20.10#820010)