如何从Java中的ResultSet复制/克隆一行?多线程实现

如何从Java中的ResultSet复制/克隆一行?多线程实现,java,multithreading,resultset,Java,Multithreading,Resultset,我检索了一个包含很多行的结果集。必须分析每一行,所以我想分析一个新线程中的每一行(不要担心:我不会同时启动所有线程,比如说一行10个)。整个结果集将专门用于从中读取数据(因此,它是一种静态只读表) 所以我想做的是: ResultSet rs; public void loadResultSet(){ ... rs = _preparedStatement.executeQuery(); int rowSize = 0; while (rs.next())

我检索了一个包含很多行的结果集。必须分析每一行,所以我想分析一个新线程中的每一行(不要担心:我不会同时启动所有线程,比如说一行10个)。整个结果集将专门用于从中读取数据(因此,它是一种静态只读表)

所以我想做的是:

ResultSet rs;

public void loadResultSet(){

    ...
    rs = _preparedStatement.executeQuery();

    int rowSize = 0;

    while (rs.next()) {
       rowSize++;
    }


    //this method starts 10 threads simultaneously
    runThreads(rowSize);

     ...

}
而且

@Override
public void run() {


    //Unknown object that allows me to store a copy of a single row from ResultSet
    Foo foo = rs.absolute(index);

    //Then i can retrieve data just like a normal ResultSet
    String s = foo.getString(1);

    ....
    ....

} 
有什么建议吗


样品非常感谢!谢谢

如果我是u,我宁愿在单独的线程中执行查询,也可以像:

从表_name中选择*,其中mod(id,threadCount)=threadId


只需给每个线程一个id并执行它们。这样,每个线程将有不同的数据要处理

如果每行运行一个线程,那么为什么只运行resultSet来获取计数呢?只需为每行启动一个线程。。。如果你想限制你的线程,使用Executors服务,并使用一个最大为N的线程池(例如10个线程),然后给每一行的线程提供任务。这不是重点。无论如何,我无法在不同位置将多个线程读入同一个结果集,问题将是相同的。我使用线程的唯一原因是,如果处理每一行需要很多时间,例如,您可以获得下一行,但您正在阻止处理前一行,将此多线程化没有其他真正的好处。你能解释一下我遗漏了什么吗?我有很多争吵。对于每一行,我必须测试它是否在一个列表中,在一个列表中添加一部分数据,在另一个列表中添加另一部分数据,在日期字段中检查内容(每行一列是一个日期)…等等。因为这是一个“简单的istruction多数据”上下文,所以我认为多线程是值得赞赏的!我会进行基准测试,看看每行处理花费了多少时间,但在任何情况下,每行都不应该有一个线程。您应该打开一个具有可配置工作线程长度的线程池,每个线程池都会获得resultset值的一个副本,并使用它执行任何需要执行的操作,这样您就不会阻塞一行,尽管我会做一些基准测试,看看这是否确实会给您带来明显的性能提升。通常,您的数据库是瓶颈,而不是处理。。。您可以做的是提高数据库的默认获取大小,并降低对它的TCP调用量……我使用的是PostgreSQL,不幸的是,这样的事情看起来相当慢。不,当然这取决于您的表。我们有一张桌子,每天有600万件物品被插入其中。实际上,我们将其与约束“insert date”一起使用,但它对我们来说非常快