O que são threads em Java e como criá-las?

Threads em Java permitem a execução simultânea de tarefas, melhorando o desempenho e a eficiência das aplicações.

O que são threads em Java e como criá-las?

No Java, uma thread é a menor unidade de execução dentro de um processo. As threads permitem que múltiplas tarefas sejam executadas simultaneamente, aproveitando melhor os recursos do processador e melhorando a performance da aplicação.

1. Criando Threads em Java

Há duas principais formas de criar uma thread em Java: estendendo a classe Thread ou implementando a interface Runnable.

1.1 Criando uma Thread Estendendo a Classe Thread

class MinhaThread extends Thread {
    @Override
    public void run() {
        System.out.println("Executando a thread: " + Thread.currentThread().getName());
    }
}

public class Main {
    public static void main(String[] args) {
        MinhaThread thread = new MinhaThread();
        thread.start();
    }
}

Explicação:

  • Criamos a classe MinhaThread estendendo Thread.
  • Sobrescrevemos o método run() para definir o comportamento da thread.
  • Chamamos start() para iniciar a execução concorrente da thread.

1.2 Criando uma Thread Implementando Runnable

class MinhaTarefa implements Runnable {
    @Override
    public void run() {
        System.out.println("Executando a thread: " + Thread.currentThread().getName());
    }
}

public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread(new MinhaTarefa());
        thread.start();
    }
}

Vantagem: Utilizar Runnable permite maior flexibilidade, pois podemos estender outras classes ao mesmo tempo.

2. Criando Múltiplas Threads

Podemos criar múltiplas threads para executar tarefas simultaneamente:

public class Main {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            Thread thread = new Thread(() -> {
                System.out.println("Thread executando: " + Thread.currentThread().getName());
            });
            thread.start();
        }
    }
}

Esse código cria 5 threads que executam em paralelo.

3. Diferença entre start() e run()

  • start(): Inicia uma nova thread e chama o método run() de forma concorrente.
  • run(): Executa o código da thread na mesma thread principal, sem paralelismo.
Thread thread = new MinhaThread();
thread.run(); // Executa na thread principal (sem concorrência)
thread.start(); // Executa em uma nova thread

Conclusão

O uso de threads em Java permite executar tarefas simultaneamente, melhorando a performance da aplicação. Podemos criar threads estendendo Thread ou implementando Runnable, sendo esta última a opção mais flexível e recomendada na maioria dos casos.

As threads são um dos conceitos mais importantes na programação concorrente. Elas permitem que aplicações realizem múltiplas tarefas ao mesmo tempo, otimizando o uso dos processadores modernos. Sem threads, programas executam de forma sequencial, podendo desperdiçar tempo de processamento. Em aplicações que lidam com grandes volumes de dados ou tarefas demoradas, como processamento de imagens ou acesso a banco de dados, o uso eficiente de threads pode reduzir drasticamente o tempo de execução.

Algumas aplicações:

  • Processamento paralelo em aplicações de alto desempenho
  • Execução simultânea de múltiplas tarefas em jogos e softwares interativos
  • Melhoria na performance de sistemas que dependem de operações de I/O
  • Implementação de servidores que atendem múltiplas requisições simultaneamente

Dicas para quem está começando

  • Sempre utilize start() para iniciar threads e não run() diretamente
  • Prefira implementar Runnable ao invés de estender Thread para maior flexibilidade
  • Evite criar muitas threads simultâneas para não sobrecarregar o sistema
  • Use ExecutorService para gerenciar múltiplas threads de forma eficiente

Contribuições de Rodrigo Farias

Compartilhe este tutorial: O que são threads em Java e como criá-las

Compartilhe este tutorial

Continue aprendendo:

Como consumir uma API externa em Java

Consumir APIs externas em Java pode ser feito usando RestTemplate ou WebClient para enviar requisições HTTP e receber respostas.

Tutorial anterior

Como funciona o conceito de concorrência em Java

A concorrência em Java permite a execução simultânea de tarefas, otimizando o uso do processador e melhorando o desempenho da aplicação.

Próximo tutorial