- Multithreading
- Multitarefa
- Multitarefa baseada em processos
- Multitarefa baseada em thread
- 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.
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. |
- 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?
- 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