Threads (encadeamento) em Java

Um dos recursos mais atraentes em Java é o suporte para fácil programação de threads. Java fornece suporte interno para programação multithread. Um programa multithread contém duas ou mais partes que podem ser executadas simultaneamente. Cada parte deste programa é chamada de thread, e cada thread define um caminho de execução separado. Assim, podemos dizer que multithreading é uma forma especializada de multitarefa.

A definição formal de um encadeamento é: Um encadeamento é uma unidade de processamento básica à qual um sistema operacional aloca tempo de processador e mais de um encadeamento pode estar executando código dentro de um processo. Às vezes, um encadeamento é chamado de processo leve ou contexto de execução.

Imagine um aplicativo de reserva de ingressos on-line com muitos recursos complexos. Uma de suas funções é “procurar passagens de trem / voo da origem e do destino”, outra é “verificar preços e disponibilidade” e uma terceira operação demorada é “reservar passagens para vários clientes ao mesmo tempo”.

Em um ambiente de tempo de execução de thread único, essas ações são executadas uma após a outra. A próxima ação pode acontecer apenas quando a anterior for concluída. Se a reserva de um bilhete demorar 10 minutos, outros usuários terão que aguardar a operação de pesquisa ou reserva. Esse tipo de aplicativo resultará em perda de tempo e clientes. Para evitar esse tipo de problema, o java fornece recursos de multithreading onde várias operações podem ocorrer simultaneamente e respostas mais rápidas podem ser obtidas para uma melhor experiência do usuário. O multithreading permite gravar programas muito eficientes que fazem o máximo uso da CPU, porque o tempo ocioso pode ser reduzido ao mínimo.

Definindo uma thread

No sentido mais geral, você cria um encadeamento instanciando um objeto do tipo Thread.

Java define duas maneiras pelas quais isso pode ser realizado:

Implementando Runnable

A maneira mais fácil de criar um encadeamento é criar uma classe que implemente a interface Runnable. Runnable abstrai uma unidade de código executável. Você pode construir uma thread em qualquer objeto que implementa Runnable. Para implementar o Runnable, uma classe precisa apenas implementar um único método chamado run (), que é declarado assim:

public void run( )

Dentro de run (), você definirá o código que constitui o novo thread. É importante entender que run () pode chamar outros métodos, usar outras classes e declarar variáveis, assim como o thread principal. A única diferença é que run () estabelece o ponto de entrada para outro encadeamento simultâneo de execução dentro do seu programa. Esse encadeamento terminará quando o run () retornar.

class MinhaRunnableThread implements Runnable {

public void run() {

System.out.println(“Trabalho importante em execução em MinhaRunnableThread”);

}

}

Estendendo java.lang.Thread

A maneira mais simples de definir o código a ser executado em um encadeamento separado é

A estrutura é: