我需要使用多线程读取批量数据文件并处理数据(如数据验证、跟踪验证失败和插入数据库等)。我想使用主线程从文件中读取数据并使用ExecutorService
.
这是正确的方法吗?如果是,我该怎么做?
此外,一旦对数据库进行验证和插入,我需要跟踪每条记录输出。如何跟踪每条记录的输出?可以把它放在一个公共变量上并增加故障记录数据的数量吗?
我还需要跟踪有多少记录顺序失败?
谢谢。
我需要使用多线程读取批量数据文件并处理数据(如数据验证、跟踪验证失败和插入数据库等)。我想使用主线程从文件中读取数据并使用ExecutorService
.
这是正确的方法吗?如果是,我该怎么做?
此外,一旦对数据库进行验证和插入,我需要跟踪每条记录输出。如何跟踪每条记录的输出?可以把它放在一个公共变量上并增加故障记录数据的数量吗?
我还需要跟踪有多少记录顺序失败?
谢谢。
我建议将文件拆分为虚拟段,并允许您的执行者选择和处理这些段。在主线程中读取文件最终会造成瓶颈。允许每个线程分别并行读取其段。请参阅以下帖子如何在Java中实现对映射到内存的文件的并发读取?
是的,它是正确的,但是如果处理需要大量时间(与读取文件相比),处理片段是独立的并且您有多个内核,您将会得到改进。将您的数据读取到任何容器(如果它适合 RAM)并使用任何 ExecService 教程,如下所示:http ://tutorials.jenkov.com/java-util-concurrent/executorservice.html
你的想法是正确的IMO,我会做这样的事情:
while ((line = filereader.readLine()) != null) {
Mycallable mycallable = new Mycallable(line);
executor.submit(mycallable);
}