Galera bom dia, bom estou implementando threads em meu projeto, bom eu tenho um Metodo,
private void preencheLinhasTabelaMatricula(File file, int nivel) {
toda logica
}
e então implementei threads, inteface runnable, porém eu adicionei o metodo run(), então quero implementar o metodo preencheLinhasTabelaMatricula, no metodo run(), sendo assim não preciso migra a logica pro metodo run(), então quero implementar o metodo preencheLinhasTabelaMatricula(), no metodo run, como faço isso? alguem pode me ajudar pfv.
qual a sintaxe, com implemento um metodo dentro do metodo run(). ??
public void run() {
preencheLinhasTabelaMatricula(..., ....);
}
??? é desta forma msm ?? ja tentei e continua o erro,
public class RunnableImpl implements Runnable{
private final ObjetoQuePreencheTabelas o;
private final File file;
private final int nivel;
public RunnableImpl(ObjetoQuePreencheTabelas o, File file, int nivel){
this.o = o;
this.file = file;
this.nivel = nivel;
}
public void run(){
try{
o.preencheLinhasTabelaMatricula(file, nivel);
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
Porém, já vou adiantando, se esse método preenche tabelas manipula objetos da interface gráfica, seu método está errado. Qualquer atualização de interface gráfica deve ser executada tão somente pelo EventDispatcher.
Por outro lado, se você estiver disparando multiplas threads para atualizar as mesmas tabelas no banco de dados, sinto-lhe informar, mas você simplesmente estará transferindo a concorrência que existe no seu client para o banco de dados. Isso porque quando você abre uma transação, as tabelas envolvidas são lockadas para atualização (na verdade, isso é configurável no banco de dados, mas o comportamento padrão é esse).
Enfim, fica a dica:
Eu tinha um problema, resolvi com threads:
lemasprob euAgte nho vários ora
2 curtidas
Bom esse metodo ele pega arquivos do banco e preenche a tabela, porem ao executar estava demorando, no caso estava em uma unica threads e irei criar multi para esse visualização ser em outra threads, ai resolvir implementar, porem terei problemas?
diante mao muitooo obrigado cara me ajudou .
Muito provavelmente sim, por 2 motivos:
- as threads estarão concorrendo pelas mesmas tabelas no banco de dados
- você tem várias threads atualizando a interface, e como eu disse, atualização de interface só pode ser feita pelo EventDispatcher
Eu consideraria o seguinte:
- restringir melhor a consulta ao banco de dados, ou seja, adicionar mais filtros
- paginar os resultados
- verificar índices, caso a consulta já tenha filtros
1 curtida
Muito obrigado mais um vez, vou dar mais uma estudada pra ver a solução.