[DUVIDA] Criar Threads com ResulSet (ODBC)

Ola,
Estou realizando essa consulta:

[code]

public Collection<ProdutoVO> recuperarProdutos() {
    produtos = new ArrayList<ProdutoVO>();
    Connection conn = AcessaBanco.getInstance().abreConexao();
    String sql = "SELECT DESCRICAO, CDPROD, CFISCAL, UNIDADE, DEPTO, CODBARRA, STCOFINS, STPIS FROM ESTOQUE";
    try {
        st = conn.createStatement();            
        rs = st.executeQuery(sql);
        while (rs.next()) { //Como colocar esse while em por exemplo 5 Threads
            ProdutoVO produto = new ProdutoVO();
            produto.setCodigo(rs.getInt("CODIGO");                
            produto.setDescricao(rs.getString("DESCRICAO"));
            produto.setNcm(rs.getString("CFISCAL"));
            ...
            produto = recuperarDadosSaldos(produto);
            produtos.add(produto);
        }

    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    return produtos; //Tem 20.000 registros aqui 
}[/code]

Eu gostaria de saber como eu faria para colocar o while do comentario em Threads. Trabalhando com JPA conseguimos fazer assim:

q.setMaxResults(batchSize); //Esse metodo achei statement.setFetchSize(int max) ou statement.setMaxRows(int max)
q.setFirstResult(getFirstItem()); //Neste e no proximo é que nao consegui achar similares
return q.getResultList();

Nao consegui encontrar os metodos em Statement nem em ResultSet para quebra o resultado da consulta e colocar as varias partes em 10 Threads por exemplo.

Esse codigo do jeito que esta ai executa em 19 minutos. Gostaria de reduzir o tempo.

Grato a todos desde já

é veio, não sei qual a urgencia da sua consulta para o usuario, mas vc pode fazer o seguinte, quando o user clicar em procurar, vc starta a thread e libera o sistema pro usuario continuar trabalhando, quando terminar a thread volta a lista pro usuario, mais ai nao sei a sua relidade.

Pode tb limitar mais essa consulta, quem vai analizar 20.000 registros? :S

[quote=abelgomes]é veio, não sei qual a urgencia da sua consulta para o usuario, mas vc pode fazer o seguinte, quando o user clicar em procurar, vc starta a thread e libera o sistema pro usuario continuar trabalhando, quando terminar a thread volta a lista pro usuario, mais ai nao sei a sua relidade.

Pode tb limitar mais essa consulta, quem vai analizar 20.000 registros? :S[/quote]

A consulta nao é para ser analisada. eu estou exportando a tabela para um sistema de contabilidade. Entao eu preciso selecionar tudo para depois organizar no layout de exportacao. Entendeu? eu preciso exportar produtos e notas fiscais. So produtos depois de otimizar muito os codigos esta dando 13 minutos. Imagine quando for as notas do mes todo? vai ser 1 dia.

bom nesse caso, de quanto em quanto tempo será feito essa exportação? Pode ser durante a noite?Na hora de exportar de um sistema para outro o usuário não precisa esperar vc pode colocar toda essa fase de adaptação de layouts, consultas, etc dentro da thread e quando terminar exibe uma msg pro usuario. Dados prontos para exportar! Ou algo do tipo. Ou entao agenda pra fazer durante a noite.
Depois de exportar uma vez a tabela completa com 20.000 registros pq nao mandar somente a diferença depois?
abçs…espero ter ajudado.