Boa tarde,
Tenho uma aplicação que necessitará consultar algumas informações no banco de dados. São umas 12 consultas que serão disparadas.
Porém esse banco é muito lento e algumas vezes esse processo demora até 1 minuto para ser concluído. O tempo desejado seria em torno de 15 segundos.
Para resolver essa questão, optei em criar algumas threads para que as consultas fosse processadas paralelamente e ao final, os resultados seriam atribuídos em um objeto.
Nunca tive a necessidade de implementar algo assim e andei fazendo alguns estudos para verificar a melhor maneiro.
Criei um exemplo para que alguém pudesse me informar se o caminho está correto ou errado.
Segue abaixo o exemplo.
Classe que processar as Threads.
Os valores retornados são calculados gerando um resultado.
public class Teste {
public static void main(String[] args) {
try {
long inicio = System.currentTimeMillis();
ExecutorService executor = Executors.newCachedThreadPool();
Future<Integer> resultado1 = executor.submit(new Teste1());
Future<Double> resultado2 = executor.submit(new Teste20());
System.out.println(resultado1.get() * resultado2.get());
long fim = System.currentTimeMillis();
executor.shutdown();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Classe que retorna um inteiro.
public class TesteCalcInteiro implements Callable<Integer> {
public TesteCalcInteiro() {
}
@Override
public Integer call() throws Exception {
try {
Thread.sleep(10000);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return 2;
}
}
Classe que retorna um double
public class TesteCalcDouble implements Callable<Double> {
public TesteCalcDouble() {
}
@Override
public Double call() throws Exception {
try {
Thread.sleep(10000);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return 2.5;
}
}
Para facilitar a analise do resultado, coloquei uma thread para que ela dormisse durante 10 segundos. Isso facilitou muito para que eu tivesse uma idéia de o quanto rápido ficou.
Espero que eu tenha sido claro na explicação e fico muito grato se alguém puder me ajudar com essa questão pois a minha necessidade primordial no momento é fazer com que a aplicação funcione o mais rápido possivel.
Att,
Marco