多线程处理结果集的同一记录

问题描述 投票:-1回答:1

我必须处理近4万条记录,并将它们传递给我的webservice来推送数据,在不使用多线程的情况下,它工作得很好,但却花费了太多的时间,这是不可接受的。我试图在这里应用多线程,但问题是我可以在日志中看到多个线程在处理结果集的同一条记录(即使我是在做完结果集.next后再传递)。

我是Java多线程的新手,希望得到任何帮助。

这是线程创建和作业分配的部分。

 ExecutorService exservice =Executors.newFixedThreadPool(3);


       while(rs.next()){

        exservice.execute(new EmployeeThread(rs,userservice,logger));

         }

    exservice.shutdown(); 
java multithreading jdbc resultset
1个回答
1
投票

你正在调用 rs.next 另外,你在工作线程之外对结果集进行迭代,所以它们都只处理一条记录?

你应该这样做。

  1. 将选择语句执行到 RowSet 不像 ResultSet, RowSet 可以从SQL连接中断开,允许你自由地对该集合进行多次迭代。RowSet 也是可序列化的,允许它在网络上传递。

  2. 对于每个工作线程,你可以确定它的工作 "碎片":如果你有1000条记录要处理,有3个工作线程,那么线程#1将处理0-333条记录,线程#2将处理334-666条记录,以此类推。

  3. 通过 RowSet 每一个线程都会迭代和跳过,直到开始索引,并处理其shard的记录。

为了让你入门,这里是官方教程,关于 RowSet 来自Oracle文档。https:/docs.oracle.comjavasetutorialjdbcbasicsrowset.html。

© www.soinside.com 2019 - 2024. All rights reserved.