У меня есть файл данных с тысячей строк. Я читаю их и сохраняю в базе данных. Я хочу, чтобы этот процесс выполнялся в несколько потоков партиями, скажем, по 50 строк. Когда я читаю файл, 10 строк отправляются в ExecutorService.
ExecutorService executor = Executors.newFixedThreadPool(5);`
Я могу сделать ниже в цикле while, пока мои строки не закончатся....
Future<Integer> future = executor.submit(callableObjectThatSaves10RowsAtOneTime);
Но я не хочу читать весь файл в память, если обработка 10 строк занимает время. Я хочу отправить только 5 до тех пор, пока не вернется один из потоков, а затем я отправлю следующий.
Допустим, потоку требуется 20 секунд, чтобы сохранить 10 записей, я не хочу, чтобы ExecutorService
заполняли тысячу строк, так как процесс чтения продолжает читать и отправлять в ExecutorService
Каков наилучший способ добиться этого?