Publicado em

Classe Thread em Java

Partilhar:

Introdução

A programação multithread é uma técnica que permite que uma aplicação execute múltiplas operações simultaneamente. Em Java, a classe Thread é a espinha dorsal deste tipo de programação.

Multithreading e Seus Benefícios

Multithreading, ao permitir a execução paralela de tarefas, pode aumentar significativamente o desempenho de aplicações, especialmente aquelas que realizam operações intensivas ou bloqueantes, como o acesso a recursos de rede. Outros benefícios incluem:

  • Responsividade: Uma aplicação com interface gráfica pode continuar respondendo ao utilizador enquanto processa tarefas pesadas em background.
  • Recursos: Em sistemas com múltiplos cores de CPU, o multithreading permite que uma aplicação maximize a utilização dos cores disponíveis.

Entendendo a Classe Thread

A classe Thread fornece os meios para criar, controlar e finalizar threads. Além dos métodos já mencionados:

  • Thread.currentThread(): Retorna uma referência ao thread atualmente em execução.
  • Thread (objeto).getState(): Retorna o estado atual do thread.

Desafios da Programação Multithread

Embora poderosa, a programação multithread traz desafios:

  • Concorrência: A necessidade de garantir que múltiplos threads não interfiram uns nos outros ao acessar recursos compartilhados.
  • Deadlocks: Situações onde dois ou mais threads estão esperando uns pelos outros, resultando em um impasse.
  • Starvation: Quando um thread é continuamente negado o acesso a recursos e não consegue progredir.

Para superar estes desafios, Java fornece diversas ferramentas, incluindo o pacote java.util.concurrent.

Exemplo Prático

O exemplo a seguir demonstra a criação e controle de threads usando a classe Thread:

package com.caffeinealgorithm.programaremjava;

public class ClasseThread {
  private Thread tarefa;

  public void Run() {
    tarefa = new Thread(this::executarTarefa);
    tarefa.start();

    for (int indice = 1; indice <= 5; indice++) {
      System.out.printf("Run(): #%d\n", indice);

      try {
        Thread.sleep(1000);
      }
      catch (InterruptedException excecao) {
        System.out.println(excecao);
      }
    }

    System.out.println("A tarefa Run() finalizou.");

    try {
      tarefa.join();
    }
    catch (InterruptedException excecao) {
      System.out.println(excecao);
    }

    System.out.println("A tarefa executarTarefa() finalizou.");
  }

  private void executarTarefa() {
    for (int indice = 1; indice <= 10; indice++) {
      System.out.printf("executarTarefa(): #%d\n", indice);

      try {
        Thread.sleep(1000);
      }
      catch (InterruptedException excecao) {
        System.out.println(excecao);
      }
    }
  }
}

/*
  Run(): #1
  executarTarefa(): #1
  Run(): #2
  executarTarefa(): #2
  Run(): #3
  executarTarefa(): #3
  Run(): #4
  executarTarefa(): #4
  Run(): #5
  executarTarefa(): #5
  A tarefa Run() finalizou.
  executarTarefa(): #6
  executarTarefa(): #7
  executarTarefa(): #8
  executarTarefa(): #9
  executarTarefa(): #10
  A tarefa executarTarefa() finalizou.
*/

Conclusão

A classe Thread é uma ferramenta essencial para qualquer desenvolvedor Java que deseja explorar o poder da programação multithread. Entender seus métodos, benefícios e desafios é fundamental para criar aplicações robustas, responsivas e eficientes.

Happy coding!