Threads Java e multithreading
Pressione Enter ou clique para ver a imagem em tamanho real. O que é um Thread? Um thread Java é a menor unidade de execução dentro de um programa. É um subprocesso leve que é executado de forma independente, mas compartilha o mesmo espaço de memória que o processo, permitindo que várias tarefas sejam executadas simultaneamente. O que é Multithreading? Multithreading em Java é um recurso que permite que um programa execute vários threads simultaneamente. Isso permite que as tarefas sejam executadas em paralelo e utilizem a CPU com mais eficiência. Relacionamento: um processo pode ter vários threads. Memória: cada thread é executado de forma independente, mas compartilha a mesma memória. Analogia do mundo real: a cozinha do restaurante. Imagine a cozinha de um restaurante:O Processo: A própria Cozinha.Os Threads: Vários chefs preparam pratos diferentes ao mesmo tempo.Benefício: Isso acelera o serviço e utiliza todos os recursos disponíveis (CPU) de forma eficiente.Diferentes maneiras de criar ThreadsThreads podem ser criados usando dois mecanismos principais.1. Estendendo a classe Thread Criamos uma classe que estende Thread e substitui seu método run() para definir a tarefa. Em seguida, criamos um objeto desta classe e chamamos start(), que chama automaticamente run() e inicia a execução do thread. Exemplo: Restaurant Kitchen (Extending Thread)class CookingTask estende Thread {private String task;CookingTask(String task) {this.task = task;}public void run() {System.out.println(task + ” está sendo preparado por ” + Thread.currentThread().getName());}}public class Restaurant {public static void main(String() args) {Thread t1 = new CookingTask(“Pasta”);Thread t2 = new CookingTask(“Salada”);t1.start();t2.start();}}2. Implementando a interface Runnable Criamos uma nova classe que implementa a interface java.lang.Runnable e definimos o método run() lá. Em seguida, instanciamos um objeto Thread, passamos a instância Runnable para ele e chamamos o método start(). Exemplo: Restaurant Kitchen (Runnable Interface)class CookingJob implements Runnable {private String task;CookingJob(String task) {this.task = task;}public void run() {System.out.println(task + ” está sendo preparado por ” + Thread.currentThread().getName());}}public class RestaurantRunnable {public static void main(String() args) {Thread t1 = new Thread(new CookingJob(“Soup”));Thread t2 = new Thread(new CookingJob(“Pizza”));t1.start();t2.start();}}Quando usar qual?Use estende Thread: Se sua classe não estende nenhuma outra classe.Use implements Runnable: Se sua classe já estende outra classe. Isso é preferido porque Java não suporta herança múltipla. Ciclo de vida de um thread Durante seu ciclo de vida, um thread Java transita por vários estados, desde a criação até o término. Novo estado: o thread foi criado, mas ainda não iniciado. Estado executável: o thread está pronto para ser executado e aguardando o tempo de CPU. (por exemplo, suspensão).Estado encerrado: o thread concluiu a execução.Threads em execução: start() vs run()Há uma distinção crítica entre os dois métodos usados para executar código em threads.O método Definiçõesrun(): contém o código para o thread. Chamá-lo diretamente se comporta como uma chamada de método normal (nenhum novo thread é criado). Método start(): inicia um novo thread e chama internamente run() simultaneamente. {System.out.println(“Runnable Thread Running”);}}public class ThreadExaple{public static void main(String() args) {// Crie e inicie a classe Thread threadThreadImpl t1 = new ThreadImpl();t1.start();// Crie e inicie a interface executável threadRunnableThread r = new RunnableThread();Thread t2 = new Thread(r);t2.start();// Aguarde que ambos os threads sejam executados completetry {t1.join(); // Aguarde t1t2.join(); // Wait for t2} catch (InterruptedException e) {e.printStackTrace();}}}Usamos start() para lançar um novo thread, que então chama o método run() em paralelo. Se chamarmos run() diretamente, ele funcionará como uma chamada de método normal no thread atual. Invocações múltiplas No conceito Multi-Threading do Java, você não pode chamar o método start() duas vezes no mesmo objeto de thread. Fazer isso lançará uma IllegalStateException. No entanto, o método run() pode ser chamado várias vezes, pois é apenas um método normal call.class MyThread estende Thread {public void run() {System.out.println(“Thread atual: ” + Thread.currentThread().getName());}}public class ThreadExample{public static void main(String() args) {MyThread t = new MyThread();t.start();t.start(); // Isso lança IllegalStateException// No entanto, t.run(); t.run(); seria válido (mas é executado no thread principal)}}Método Java Thread.sleep()A classe Thread contém o método sleep(), usado para pausar a execução do thread atual por um período específico. Após o tempo acabar, o thread se torna executável novamente.Assinaturas:public static void sleep(long millis)public static void sleep(long millis, int nanos)Parâmetros:millis: Duração do tempo em milissegundos.nanos: Tempo adicional em nanossegundos (varia de 0 a 999999).Pontos Importantes:Pausa a Execução: Pausa a execução do thread atual.Interrupção: Lança InterruptedException se outro thread o interromper durante o sono (deve ser tratado com try-catch ou throws). Carga do sistema: a duração real do sono pode variar com base na carga do sistema. Flexibilidade: pode ser usado no thread principal ou em qualquer thread personalizado. class.Finalmente, java.lang.Runnable é uma interface destinada a ser implementada por uma classe cujas instâncias devem ser executadas por um thread. Isso geralmente é preferido em vez de subclassificar Thread.Crie uma classe que implemente Runnable e implemente o método run().Instancie a classe Thread e passe a instância Runnable para o construtor.Invoque start() na instância Thread. Isso chama internamente o método run() do implementador. Key Takeaway: Invocar start() cria um novo Thread que executa o código escrito em run(). Chamar run() diretamente não cria um novo thread; ele é executado sequencialmente no thread de chamada.
Publicado: 2025-12-23 17:43:00
fonte: medium.com








