Я хочу считать CSV файл с большим количеством строк и обработать эти строки в многопоточном режиме. Делаю так:
@SpringBootApplication
public class CsvReaderApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(CsvReaderApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println(args[0]);
String thisLine;
int count = 0;
BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]));
ExecutorService pool = Executors.newFixedThreadPool(1000);
while ((thisLine = bufferedReader.readLine()) != null ) {
if (count > 150) count = 0;
pool.submit(new MyTask(thisLine));
count++;
}
pool.shutdown();
}
}
class MyTask implements Runnable {
private String line;
private static int countLine = 0;
public MyTask(String line) {
this.line = line;
}
@Override
public void run() {
countLine ++;
System.out.println("Line: " + line + " countLine: " + countLine);
//бизнес логика
}
}
В итоге получается так, что в методе run строки выводятся не в порядке, в котором они идут в файле, а в разнобой. Можно ли как-то обработать строки в том порядке, в котором они идут в исходном файле или вообще есть более эффективный способ?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей