Como criar um thread em Java? | Multithreading em Java
Publicados: 2020-12-29Neste artigo, veremos o encadeamento em Java e exploraremos os mecanismos que tornam o encadeamento possível.
Índice
Encadeamento em Java
O recurso de encadeamento em Java é um subprocesso leve. É considerada a menor unidade de processamento. É um meio de alcançar a multitarefa em um programa. É um recurso útil quando se trata de jogos, animação, etc.
Java tem suporte embutido para a criação de threads e multi-threads. Esta é uma abordagem inteligente para minimizar ineficiências e arrastar por meio da utilização ideal do espaço da CPU. Em Java, isso pode ser feito de duas maneiras:
- Estender classe de thread, ou
- Implementar interface executável
Quando mais de um thread é executado simultaneamente, é chamado de multithreading. Isso essencialmente permite que várias partes de um programa sejam executadas simultaneamente, cada parte de um thread e cada thread segue um caminho distinto para a execução.
Threads utilizam espaço de memória compartilhada; a memória não é alocada para cada parte, resultando em uso máximo da CPU. Além disso, mudar contextos não toma muito tempo. No entanto, muitos threads podem envolver sua CPU na troca de contexto e sua execução pode ser atrasada.
Um thread pode existir em um dos seis estados a seguir
- NEW – assim que um thread é criado, ele existe no novo estado. Isso significa essencialmente que o thread ainda está para iniciar a execução.
- RUNNING – quando uma thread está sendo executada ou está na fila para ser executada, ela está no estado running.
- WAITING – um thread em execução às vezes é interrompido ou suspenso para permitir que outra atividade ocorra. Uma versão sem tempo limite de wait() ou join() pode suspender a execução de um thread. Uma vez que a ação tenha ocorrido, um thread suspenso é retomado.
- TIMED-WAITING – um thread em execução às vezes é temporariamente interrompido ou suspenso por uma duração específica. Por exemplo, quando a função sleep() é chamada.
- BLOQUEADO – quando um thread Java suspenso não pode adquirir um recurso específico, ele é bloqueado e existe no estado bloqueado.
- TERMINATED – quando um thread completou sua execução, ele existe no estado terminado. No entanto, você pode encerrar um thread a qualquer momento.
Saiba mais sobre a arquitetura e os componentes Java.

Benefícios de criar um thread em Java
Existem várias vantagens na criação de threads. Alguns destes são
- Como as threads são independentes, uma execução não afeta a outra, mesmo quando operam em espaço de memória compartilhada. Isso também significa que você pode realizar mais de uma operação simultaneamente.
- Threading é uma forma de multitarefa e economiza tempo.
- Um erro em um segmento não afeta outro.
Como criar uma thread em Java?
Como discutido acima, existem duas maneiras de fazer isso: Estender a classe de thread ou Implementar a interface executável
Classe de thread
Existem construtores e métodos na classe Thread que permitem realizar operações, gerenciar e acompanhar as threads. Ele estende a classe Object que implementa a interface Runnable complementar. Os construtores presentes na classe thread são :Thread(), Thread(String name), Thread(Runnable r) e Thread(Runnable r, String name).
A seguir estão os métodos e suas descrições
| Método | Para que serve? |
| começar() | Inicia a execução |
| corre() | Para executar uma ação para um encadeamento |
| dormir() | Coloca um thread em suspensão por um determinado período |
| Junte-se() | Aguarde até que outro thread seja encerrado |
| getPriority() | Para denotar a prioridade de um determinado segmento |
| definirPrioridade() | Para alterar a prioridade de um determinado thread |
| getNome() | Para retornar o nome de um encadeamento especificado |
| nome do conjunto() | Para alterar o nome do thread especificado |
| getId() | Para retornar o ID de um determinado encadeamento |
| Está vivo() | Para testar se um thread ainda existe em qualquer um dos estados |
| colheita() | Pausa a execução de um objeto de encadeamento para permitir que outro(s) encadeamento(s) sejam executados |
| suspender() | Para suspender um determinado encadeamento |
| retomar() | Para retomar um encadeamento do estado suspenso |
| Pare() | Para parar um determinado encadeamento |
| destruir() | Para destruir grupos e subgrupos de threads |
| interromper() | Para causar uma interrupção na execução do thread |
| estáinterrompido() | Para testar se a execução de uma determinada thread é interrompida |
| interrompido() | Para testar se a execução do thread atual é interrompida |
| activeCount() | Para retornar a contagem de threads ativos em um grupo de threads |
| HoldLock() | Ele retorna true se e somente se o thread atual mantiver o bloqueio do monitor no objeto especificado. |
| getState() | Para determinar o estado de um determinado thread |
| setContextClassLoader() | Para definir o contexto ClassLoader |
| getContextClassLoader() | Para retornar o contexto ClassLoader |
Para criar um thread estendendo a classe Thread, primeiro deve ser criada uma classe que estenda a classe java.lang.Thread. Esta classe é definida para substituir o método run(). Em seguida, um objeto é criado na nova classe que está seguindo chamando o método start() para iniciar a execução da thread.

Deve ler: Programas padrão em Java que você deve fazer check-out
Interface executável
Esta é a maneira mais fácil de criar um tópico. Apenas um método é necessário para implementar a Interface Runnable: run()
Para declará-lo, escrevemos
execução pública void()

Dentro de run( ), continuamos a escrever o código para criar uma nova thread.
Inscreva-se em cursos de engenharia de software das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.
Classe de thread vs interface executável
A classe de thread impede que você estenda qualquer outra classe. Isso ocorre porque a herança múltipla não é possível em Java. No entanto, este não é o caso quando implementamos a interface Runnable onde você continua a estender outras classes.
A extensão da classe Thread torna vários métodos importantes acessíveis a você que aprimoram a funcionalidade de um thread. Por exemplo, yield(), stop(), isalive(), interrupt(). A interface Runnable tem apenas um método que é bastante limitante.
Empacotando
Se você estiver interessado em aprender mais sobre Java, desenvolvimento de software full-stack, confira o Programa PG Executivo do upGrad & IIIT-B em Desenvolvimento de Software Full-stack, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, 9+ projetos e atribuições, status de ex-alunos do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.

