Como criar um thread em Java? | Multithreading em Java

Publicados: 2020-12-29

Neste 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:

  1. Estender classe de thread, ou
  2. 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

  1. NEW – assim que um thread é criado, ele existe no novo estado. Isso significa essencialmente que o thread ainda está para iniciar a execução.
  2. RUNNING – quando uma thread está sendo executada ou está na fila para ser executada, ela está no estado running.
  3. 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.
  4. 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.
  5. BLOQUEADO – quando um thread Java suspenso não pode adquirir um recurso específico, ele é bloqueado e existe no estado bloqueado.
  6. 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

  1. 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.
  2. Threading é uma forma de multitarefa e economiza tempo.
  3. 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.

Aterre no seu emprego dos sonhos

Inscreva-se agora para Mestrado em Engenharia de Software