logo

Multithreading em Java

  1. Multithreading
  2. Multitarefa
  3. Multitarefa baseada em processos
  4. Multitarefa baseada em thread
  5. O que é tópico

Multithreading em Java é um processo de execução de vários threads simultaneamente.

Um thread é um subprocesso leve, a menor unidade de processamento. Multiprocessamento e multithreading, ambos são usados ​​para realizar multitarefa.

string de acréscimo java

No entanto, usamos multithreading em vez de multiprocessamento porque os threads usam uma área de memória compartilhada. Eles não alocam áreas de memória separadas, portanto economizam memória e a alternância de contexto entre os threads leva menos tempo que o processo.

Java Multithreading é usado principalmente em jogos, animações, etc.


Vantagens do multithreading Java

1) É não bloqueia o usuário porque os threads são independentes e você pode executar várias operações ao mesmo tempo.

2) Você pode realizar muitas operações juntas, economizando tempo .

3) Os tópicos são independente , portanto, não afetará outros threads se ocorrer uma exceção em um único thread.


Multitarefa

Multitarefa é um processo de execução de várias tarefas simultaneamente. Usamos multitarefa para utilizar a CPU. A multitarefa pode ser alcançada de duas maneiras:

  • Multitarefa baseada em processos (multiprocessamento)
  • Multitarefa baseada em thread (multithreading)

1) Multitarefa baseada em processos (multiprocessamento)

  • Cada processo possui um endereço na memória. Em outras palavras, cada processo aloca uma área de memória separada.
  • Um processo é pesado.
  • O custo da comunicação entre o processo é alto.
  • Mudar de um processo para outro requer algum tempo para salvar e carregar registros , mapas de memória, atualização de listas, etc.

2) Multitarefa baseada em thread (multithreading)

  • Threads compartilham o mesmo espaço de endereço.
  • Um fio é leve.
  • O custo de comunicação entre os threads é baixo.

Nota: Pelo menos um processo é necessário para cada thread.

O que é Thread em java

Um thread é um subprocesso leve, a menor unidade de processamento. É um caminho separado de execução.

Os threads são independentes. Se ocorrer uma exceção em um thread, isso não afetará outros threads. Ele usa uma área de memória compartilhada.

Multithreading Java

Conforme mostrado na figura acima, um thread é executado dentro do processo. Há alternância de contexto entre os threads. Pode haver vários processos dentro do sistema operacional e um processo pode ter vários threads.

Nota: Apenas um thread é executado por vez.

Classe Java Thread

Java fornece Classe de thread para alcançar a programação de threads. A classe Thread fornece construtores e métodos para criar e executar operações em um thread. A classe Thread se estende Classe de objeto e implementa interface executável.

Métodos de thread Java

S. N. Modificador e tipo Método Descrição
1) vazio começar() É usado para iniciar a execução do thread.
2) vazio correr() É usado para executar uma ação para um thread.
3) vazio estático dormir() Ele suspende um thread pelo período de tempo especificado.
4) Tópico estático thread atual() Ele retorna uma referência ao objeto thread atualmente em execução.
5) vazio juntar() Ele espera que um thread morra.
6) interno getPrioridade() Ele retorna a prioridade do thread.
7) vazio definirPrioridade() Isso altera a prioridade do thread.
8) Corda getNome() Ele retorna o nome do thread.
9) vazio nome do conjunto() Ele muda o nome do tópico.
10) longo getId() Ele retorna o id do thread.
onze) boleano Está vivo() Ele testa se o thread está ativo.
12) vazio estático colheita() Isso faz com que o objeto de thread em execução seja pausado e permita que outros threads sejam executados temporariamente.
13) vazio suspender() É usado para suspender o thread.
14) vazio retomar() É usado para retomar o thread suspenso.
quinze) vazio parar() É usado para parar o thread.
16) vazio destruir() É usado para destruir o grupo de threads e todos os seus subgrupos.
17) boleano isDaemon() Ele testa se o thread é um thread daemon.
18) vazio setDaemon() Ele marca o thread como daemon ou thread do usuário.
19) vazio interromper() Isso interrompe o thread.
vinte) boleano é interrompido() Ele testa se o thread foi interrompido.
vinte e um) booleano estático interrompido() Ele testa se o thread atual foi interrompido.
22) interno estático contagem ativa() Ele retorna o número de threads ativos no grupo de threads do thread atual.
23) vazio verificarAcesso() Ele determina se o thread atualmente em execução tem permissão para modificá-lo.
24) booleano estático holdLock() Ele retorna verdadeiro se e somente se o thread atual mantém o bloqueio do monitor no objeto especificado.
25) vazio estático dumpStack() Ele é usado para imprimir um rastreamento de pilha do thread atual no fluxo de erros padrão.
26) Elemento StackTrace[] getStackTrace() Ele retorna uma matriz de elementos de rastreamento de pilha que representam o despejo de pilha do thread.
27) interno estático enumerar() É usado para copiar o grupo de threads de cada thread ativo e seu subgrupo na matriz especificada.
28) Thread.Estado getEstado() É usado para retornar o estado do thread.
29) Grupo de tópicos getThreadGroup() É usado para retornar o grupo de threads ao qual este thread pertence
30) Corda para sequenciar() É usado para retornar uma representação de string deste thread, incluindo o nome, a prioridade e o grupo de threads do thread.
31) vazio notificar() É usado para notificar apenas um thread que está aguardando um determinado objeto.
32) vazio notificarTodos() É usado para notificar todos os threads em espera de um determinado objeto.
33) vazio setContextClassLoader() Ele define o contexto ClassLoader para o Thread.
3.4) Carregador de classe getContextClassLoader() Ele retorna o contexto ClassLoader para o thread.
35) Thread estático.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Ele retorna o manipulador padrão invocado quando um thread termina abruptamente devido a uma exceção não detectada.
36) vazio estático setDefaultUncaughtExceptionHandler() Ele define o manipulador padrão invocado quando um thread termina abruptamente devido a uma exceção não detectada.
Você sabe
  • Como realizar duas tarefas por dois threads?
  • Como realizar multithreading por classe anônima?
  • O que é o Thread Scheduler e qual é a diferença entre agendamento preemptivo e divisão de tempo?
  • O que acontece se iniciarmos um tópico duas vezes?
  • O que acontece se chamarmos o método run() em vez do método start()?
  • Qual é o propósito do método join?
  • Por que a JVM encerra o encadeamento do daemon se nenhum encadeamento do usuário resta?
  • Qual é o gancho de desligamento?
  • O que é coleta de lixo?
  • Qual é o propósito do método finalize()?
  • O que faz o método gc()?
  • O que é sincronização e por que usá-la?
  • Qual é a diferença entre método sincronizado e bloco sincronizado?
  • Quais são as duas maneiras de realizar a sincronização estática?
  • O que é impasse e quando pode ocorrer?
  • O que é comunicação ou cooperação entre threads?
O que aprenderemos em Multithreading
  • Multithreading
  • Ciclo de vida de um thread
  • Duas maneiras de criar um Thread
  • Como executar múltiplas tarefas por múltiplos threads
  • Agendador de tópicos
  • Dormindo um fio
  • Podemos iniciar um tópico duas vezes?
  • O que acontece se chamarmos o método run() em vez do método start()?
  • Entrando em um tópico
  • Nomeando um tópico
  • Prioridade de um thread
  • Tópico Daemon
  • Desligar Gancho
  • Coleta de lixo
  • Sincronização com método sincronizado
  • Bloco sincronizado
  • Sincronização estática
  • Impasse
  • Comunicação entre threads