我有一个包含数千行的数据文件。我正在阅读它们并将它们保存在数据库中。我想以 50 行的批次对这个过程进行多线程处理。正如我在文件中所读到的,有 10 行被提交给 ExecutorService。
ExecutorService executor = Executors.newFixedThreadPool(5);`
我可以在一段时间循环中执行以下操作,直到我的行结束......
Future<Integer> future = executor.submit(callableObjectThatSaves10RowsAtOneTime);
但是,如果处理 10 行需要时间,我不想将整个文件读入内存。我只想提交 5 个,直到其中一个线程返回,然后我提交下一个。
假设一个线程需要 20 秒来保存 10 条记录,我不希望它ExecutorService
被喂上千行,因为读取过程正在继续读取并提交给 ExecutorService
实现这一目标的最佳方法是什么?