Três Métodos para Implementação de Threads em Java

  1. Herança da Classe Thread

Características:

  • Estende diretamente a classe java.lang.Thread
  • Sobrescreve o método run()
  • Inicia a thread através do método start()

Vantagens:

  • Implementação simples e direta
  • Adequado para tarefas básicas de concorrência

Limitações:

  • Java não permite herança múltipla, limitando extensibilidade
  • Acoplamento entre thread e tarefa reduz flexibilidade

Exemplo de código:

public class MinhaThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread em execução");
    }
}

// Utilização
MinhaThread thread = new MinhaThread();
thread.start();

  1. Implementação da Interface Runnable

Características:

  • Implementa a interface java.lang.Runnable
  • Define o método run()
  • Requier instância Runnable passada para construtor Thread

Vantagens:

  • Contorna limitação de herança única
  • Separação entre thread e tarefa aumenta flexibilidade
  • Ideal para compartilhamento de recursos entre threads

Limitações:

  • Não retorna resultados diretamente
  • Não permite lançamento de exceções verificadas

Exemplo de código:

public class TarefaRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Tarefa Runnable executando");
    }
}

// Utilização
Thread executora = new Thread(new TarefaRunnable());
executora.start();

  1. Implementação da Interface Callable

Características:

  • Implementa a interface java.util.concurrent.Callable
  • Define o método call()
  • Requer uso de ExecutorService e Future
  • Método call() pode retornar valor e lançar exceções

Vantagens:

  • Permite obtenção de resultados da execução
  • Suporte a tratamento de exceções
  • Adequado para cenários que exigem retorno ou tratamento de erros

Limitações:

  • Implementação mais complexa
  • Depende de gerenciamento de pool de threads

Exemplo de código:

import java.util.concurrent.*;

public class TarefaCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "Resultado da tarefa Callable";
    }
}

// Utilização
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> resultadoFuture = executor.submit(new TarefaCallable());
String resultado = resultadoFuture.get(); // Obtém resultado
executor.shutdown();

Comparativo entre Abordagens

Característica Thread Runnable Callable
Extensão/Implementação Herança de Thread Interface Runnable Interface Callable
Retorno de valor Não Não Sim
Tratamento de exceções Try-catch Try-catch Lançamento permitido
Método de execução start() direto Construtor Thread ExecutorService
Flexibilidade Baixa Média Alta
Cenários típicos Tarefas simples Compartilhamento recursos Tarefas com retorno

Tags: java threads Multithreading Runnable Callable

Publicado em 8-24 05:46