Multithreading em Java explicado [com exemplos]

Publicados: 2021-06-15

Índice

Tópicos em Java

Threads em Java auxiliam na operação eficiente de um programa. As duas unidades básicas de execução do proforma são o processo e as threads. Um processo pode ser um aplicativo, um programa ou um ambiente de execução independente.

Enquanto as threads compartilham um recurso com o processo e existem com ele. Pelo menos um encadeamento está presente em cada aplicativo Java chamado encadeamento principal. Vários threads podem ser criados a partir do thread principal. Saiba mais sobre como criar um thread em Java.

Benefícios do Java Thread

  • Menos tempo e recursos são necessários para criar um thread em comparação com os processos. Portanto, os threads também são chamados de processo leve.
  • Os dados e o código do processo pai são compartilhados pelos encadeamentos.
  • A intercomunicação entre threads é fácil em comparação com a intercomunicação em um processo.
  • Threads em Java podem ser criados através da implementação do java.lang. Interface executável.

Linha única

Várias unidades de processamento estão presentes em um programa, das quais a menor é chamada de thread único. Através do uso de “thread class” Java aplica as threads. Existem dois tipos de rosca; o thread daemon e o thread do usuário.

Quando o aplicativo deve ser limpo, ocorre o uso de thread daemon. Ele é executado em segundo plano de um aplicativo. Enquanto os threads do usuário são criados quando o aplicativo é iniciado pela primeira vez.

Vantagens do fio único:

  • A sobrecarga do aplicativo é reduzida à medida que a execução de um único thread ocorre em um sistema.
  • O custo de manutenção do aplicativo é reduzido com o uso de threads únicos.

Multitarefa em Java

Multitarefa refere-se ao processo de execução de várias tarefas pela CPU em um único momento. Às vezes, a comutação de CPU pode ser realizada entre tarefas pelo usuário para colaborar com cada programa em conjunto. Memória e recursos separados são alocados para os processos em multitarefa. De duas maneiras, a multitarefa pode ser alcançada.

1. Multiprocessamento (multitarefa baseada em processos)

  • Uma área de memória separada é alocada para cada processo. Portanto, há um endereço para cada processo na memória.
  • Os processos são pesados.
  • Há um alto custo de comunicação entre os processos.
  • Algum tempo é necessário para alternar entre os processos. Isso é necessário para atualizar listas, mapas de memória, etc.

2. Multithreading (multitarefa baseada em thread)

  • O mesmo endereço é compartilhado entre as threads.
  • Os fios são leves.
  • Há um baixo custo de comunicação entre as threads.

O que é Multithreading?

Quando dois ou mais threads são executados simultaneamente em um programa, o mecanismo é chamado de multithreading. Um único processo cria muitos threads aumentando o poder de computação. Duas ou mais partes de um programa são executadas de uma forma que leva à utilização máxima da CPU.

Os threads são referidos como as partes individuais do programa. Os processos em um aplicativo podem conter vários encadeamentos ou encadeamentos únicos.
Vários threads de um aplicativo são permitidos pela Java Virtual Machine. Cada thread tem sua própria prioridade. Portanto, a preferência de execução é dada às threads com prioridade mais alta do que aquelas com prioridade mais baixa.

Para alcançar a multitarefa, tanto o processo de multithreading quanto o multiprocessamento são usados. Como uma área de memória compartilhada é usada em multithreading, ela é usada principalmente em multiprocessamento. A memória é salva, pois não é necessária alocação extra de memória. Além disso, o tempo gasto é menor do que o multiprocessamento, pois a alternância de contexto ocorre entre os threads.

Em animação, jogos, o multithreading Java é usado. Clique se quiser saber mais sobre a arquitetura e os componentes Java.

Dois mecanismos podem ser usados ​​para criar threads.

1. Extensão de classe de thread

2. Implementação de interface executável

Classe de thread vs interface executável

  • Estender a “classe Thread” não pode estender outras classes, pois heranças múltiplas não são suportadas em Java. Mas com a implementação da interface “Runnable”, outras classes base podem ser estendidas a partir da classe.
  • A funcionalidade básica de um thread pode ser estendida através da extensão da classe Thread, pois métodos embutidos são fornecidos, como interrupt(), yield(), etc.
  • Um objeto que vários threads podem compartilhar será fornecido quando executável for usado.

Classe Java Thread

A programação de threads em Java é obtida através da classe thread. Construtores são fornecidos pela classe de encadeamento e métodos para realizar operações de encadeamento. Uma classe de thread implementa uma interface executável e estende a classe Object.

Alguns métodos de thread comuns usados ​​são:

  1. start(): A execução do thread é iniciada por este método. O método run() é chamado pela JVM.
  2. sleep(int milissegundos): A execução do encadeamento é pausada por milissegundos que são fornecidos à medida que o processo de encadeamento é colocado em suspensão por meio desse método. Após a pausa, a execução da thread começa novamente. Os threads podem ser sincronizados por meio desse método.
  3. getName(): O nome do thread é retornado através deste método.
  4. setPriority(int new priority): A prioridade do thread é alterada através deste método.
  5. yield(): A thread atual é interrompida com a execução das outras threads por este método.
  6. run(): O método é para iniciar uma ação na thread.
  7. getPriority(): A prioridade do thread é retornada através do uso deste método.
  8. setName(): O nome do thread é alterado através deste método.
  9. getId(): O id do thread é retornado através deste método.
  10. suspend(): A thread é suspensa por este método.

Ciclo de vida da rosca

O ciclo de vida da rosca tem vários estágios, que estão listados abaixo:

  1. Novo: A “classe de thread” é usada para criar um thread neste estágio. Até que o encadeamento seja iniciado, o programa permanece neste estágio. O método também é chamado de thread nascido.
  2. Runnable: O método start invoca a instância do thread neste estágio do ciclo de vida do thread. O escalonador é entregue com o controle da thread para finalizar a execução. Se o thread deve ser executado ou não depende do escalonador.
  3. Running: Uma vez que a execução da thread é iniciada, o estágio é deslocado para o estágio “running”. Um encadeamento é selecionado pelo agendador do conjunto de encadeamentos e inicia a execução do aplicativo.
  4. Waiting : Como o nome sugere, nesta fase do ciclo de vida o thread espera. A sincronização de threads é essencial devido à execução de vários threads em um aplicativo. Portanto, existe a necessidade de uma thread esperar, até que a execução da outra thread termine. Portanto, o estágio do ciclo de vida também é conhecido como estágio de espera.
  5. Dead: O estágio em que ocorre a terminação do thread é denominado como o estágio “morto”. Uma vez que o thread é transferido da execução para o final do processamento, ele é encerrado e, portanto, está no “estado morto”

Sincronização de Threads em Java

O comportamento assíncrono ocorre em um programa no caso de multithreading. Se supostamente os dados forem gravados por meio de uma thread e a leitura dos dados for realizada por outra thread simultaneamente, poderá ser criada inconsistência na aplicação.

Os recursos que são compartilhados entre threads precisam ser acessados ​​por outros threads. Portanto, em tais casos, a abordagem de sincronização é abordada. Métodos sincronizados estão disponíveis em Java para obter o comportamento de sincronização.

Quando uma thread atinge o bloco sincronizado, uma vez que chega, o método não pode ser chamado por outras threads no mesmo objeto. Até que a thread termine de executar o bloco e saia dele, as outras threads devem parar e esperar.

Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Vantagens do Multithreading

  • Várias operações podem ser executadas ao mesmo tempo. Com os threads independentes em execução, o usuário não é bloqueado.
  • O tempo é economizado à medida que várias operações são executadas juntas.
  • Um thread não pode ser afetado por outro thread, pois eles são independentes. A ocorrência de uma exceção em um thread não afeta a execução de outros threads.

Exemplo de multithread

Um exemplo de um programa multithreading em java foi mostrado abaixo:

Fonte

Figura 1: um trecho do exemplo de código multithreading

A explicação do código

Linha 3: A classe “GuruThread1” implementa o executável.

Linha 8: Exibe o método main da classe.

Linha 9: A classe de thread é instanciada e uma instância “guruThread1″ é criada e um thread é criado.

Linha 10: A “classe Thread” é instanciada e uma instância “guruThread2” e uma thread são criadas.

Linha 11: O encadeamento chamado guruThread1 é iniciado.

Linha 12: O encadeamento chamado guruThread2 é iniciado.

Linha 13: O texto “Thread names are following:” é gerado.

Linha 14: O método getName() é usado para obter o nome do thread1.

Linha 15: O método getName() é usado para obter o nome do thread2.

A execução do código acima resulta na seguinte saída:

Fonte

Figura: Uma captura de tela da saída gerada a partir do programa multithreading em Java (retirada de

Conclusão

O artigo discutiu o conceito de multithreading em Java juntamente com um exemplo de um programa multithreading em java. Seu aprendizado não para por aqui e se dá bem com todos os outros conceitos básicos de Java.

Se você está interessado em dominar suas habilidades de programação a um preço amigável e se preparar para a indústria, você pode conferir o curso oferecido pelo upGrad “Master of Science in Computer Science”. Destina-se a todos os profissionais de nível médio na faixa etária de 21 a 45 anos. O curso é certificado pela Liverpool John Moores University e projetado com mais de 500 horas de aprendizado, 309 projetos e tarefas para tirar o melhor de você. Se você tiver alguma dúvida, envie-nos uma mensagem, nossa equipe entrará em contato com você.

Aterre no seu emprego dos sonhos

Candidate-se ao Programa PG Executivo em Desenvolvimento de Software do IIIT-B