Em nosso terceiro tutorial da séria sobre thread e programação paralela ou concorrente iremos implementar um recurso de execução de código em backgound. Ou em outras palavras o que chamamos de processamento paralelo. Processo este que acontece em segundo plano enquanto o programa está liberado para executar outras funções.
O código que executará em paralelo é um laço de repetição que disparará uma mensagem a cada 1500 milsegundos.
for(int pos = 0; pos < 5; pos++){
System.out.println("Executando uma rotina de envio de e-mail");
Thread.sleep(1500);
}
Da forma como implementamos o código acima, somente após a primeira interação é que a thread entrará em ação. Ou seja, depois da primeira interação, as seguintes acontecerão somente um segundo e meio (1500 milisegundos).
Após o laço de repetição que tem um thread sendo implementada em seu escopo, exibiremos uma mensagem, informando que a execução da rotina foi realizada com sucesso.
System.out.println("\nROTINA EXECUTADA COM SUCESSO!!");
Trata-se de uma mensagem que será exibida tão somente após a conclusão do processamento da estrutura de repetição for. E até aí tudo bem, uma vez que esta mensagem informa ao usuário que a rotina chegou ao fim e foi completada com sucesso.
E se após esta mensagem implementássemos uma rotina ou uma instrução que exigiria uma interação do usuário do sistema? E mais, se a rotina que utiliza a thread sleep fosse uma rotina demorada?
No cenário de um sistema de gestão de vendas, o exposto acima implicaria em um cliente impaciente esperando por um longo tempo enquanto cada rotina é processada separadamente. Quando poderiam ter sido “startadas” simultaneamente e processadas em background, enquanto o operador do sistema seguia com outras tarefas.
THREADS EM BACKGROUNDS
Então como proceder para colocar a nossa pseudo “rotina de envio de e-mail”, rodando em paralelo? Vamos a implementação. O primeiro passo é instanciar uma nova thread onde ao final escreveremos a instrução .start(). É esta instrução que vai ligar a thread ao código que será processado em segundo plano.
new Thread(){
}.start();
Dentro do escopo da thread chamaremos o método run, que é o responsável por executar o código que ficará “rodando” em segundo plano. O que faremos então é mover o for, para dentro do método run.
new Thread(){
public void run(){
for(int pos = 0; pos < 5; pos++){
System.out.println("Executando rotina de envio de e-mail");
Thread.sleep(1500);
}
}
}
Observe que a IDE acusará um erro na linha do sleep. O Eclipse IDE solicitará que o sleep seja envolvido em um bloco de try/catch.
E fora do escopo de implementação da Thread, imprimiremos uma mensagem em uma janela gráfica. Esta janela simulará o fluxo normal do sistema enquanto ao código de simulação de envio de e-mail segue sendo executado em segundo plano.
JOptionPane.ShowConfirmDiolog(“FLUXO NORMAL DE PROCESSAMENTO DO SISTEMA CONTINUA EM EXCUÇÃO”);
Em um segundo a mensagem será exibida na tela, e em segundo plano poderemos acompanhar o fluxo de processamento do código.
EM POUCAS PALAVRAS
Obviamente que o que estamos fazendo trata-se de uma simulação, e bem simples. Entretanto, é o suficiente para a compreensão da lógica por trás da implementação de threads. Ao entender os porquês e como, você estará preparado para implementações mais complexas. Eu fico por aqui, nos vemos no próximo tutorial.