Multithreading em Java – Aprenda com exemplos
Publicados: 2022-06-23Java é uma linguagem de programação que suporta programas multithread. Programas multithread acomodam duas ou mais partes (threads) que são executadas simultaneamente, lidando com diferentes tarefas, permitindo o uso ideal da CPU. Multi-threading é uma extensão do multi tasking. A multitarefa pode ser definida como um recurso em que vários processos compartilham um recurso de processamento comum, como uma unidade central de processamento.
O multithreading ramifica o conceito de multitarefa para vários aplicativos em que as operações definidas podem ser divididas em threads individuais menores.
Cada um desses encadeamentos é executado simultaneamente e de forma independente com diferentes caminhos de execução, de modo que uma exceção em um encadeamento não afete o desempenho dos outros.
Aprenda cursos de desenvolvimento 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.
O que é multithreading em Java?
Multithreading em Java é onde vários threads são executados simultaneamente para maximizar o tempo de CPU.
Ciclo de vida de um fio
As roscas têm diferentes estágios em seu ciclo de vida. Eles são os seguintes:
- Novo: O encadeamento inicia seu ciclo de vida como um novo encadeamento. Ele permanece neste estágio recém-nascido até que um programa execute o encadeamento.
- Runnable: Um thread nascido entra no estágio executável quando um programa o inicia. A thread começa a executar sua tarefa neste estágio.
- Waiting: Este é um estágio de transição em que um thread espera que outro thread conclua sua tarefa. Um encadeamento no estágio de espera muda para um estágio executável após receber um sinal de outros encadeamentos.
- Espera temporizada: Este é um estágio em que um thread executável pode entrar em um intervalo de tempo específico. Os threads neste estágio voltam para o estágio executável no final do intervalo de tempo específico.
- Dead: Este é o estágio final no ciclo de vida de um thread. Um thread entra nesse estágio após concluir sua tarefa.
Benefícios do Multithreading em Java
- Como os threads em Java são independentes, o multithreading Java não bloqueia os usuários e eles podem executar muitas operações simultaneamente.
- Como o multithreading em Java permite várias operações, ele economiza tempo e é eficiente.
- O programa pode ser executado continuamente mesmo se uma parte dele for interceptada.
- Melhora o desempenho em relação aos programas paralelos convencionais que usam vários processos.
- Criação de programas eficientes que aproveitam ao máximo o tempo de CPU.
- Melhora muito o tempo de resposta de aplicativos complexos.
- Requer menos recursos em comparação com programas paralelos tradicionais.
Ordem de prioridade de thread
O sistema operacional determina o cronograma de execução do encadeamento com base na prioridade do encadeamento. A prioridade de um thread é determinada com base no valor de sua constante.
- A constante 1 obtém prioridade mínima (MIN_PRIORITY)
- A constante 5 recebe prioridade normal ( NORM_PRIORITY)
- A constante 10 obtém a prioridade máxima (MAX_PRIORITY)
Cursos e artigos populares sobre engenharia de software
Programas populares | |||
Programa PG Executivo em Desenvolvimento de Software - IIIT B | Programa de Certificado Blockchain - PURDUE | Programa de Certificado de Segurança Cibernética - PURDUE | Mestrado em Ciência da Computação - IIIT B |
Outros artigos populares | |||
Salário de Engenheiro de Nuvem nos EUA 2021-22 | Salário do AWS Solution Architect nos EUA | Salário de desenvolvedor back-end nos EUA | Salário de Desenvolvedor Front-End nos EUA |
Salário de desenvolvedor web nos EUA | Perguntas da entrevista do Scrum Master em 2022 | Como iniciar uma carreira em segurança cibernética em 2022? | Opções de carreira nos EUA para estudantes de engenharia |
Como criar uma thread em Java?
Threads podem ser criadas em Java de duas maneiras:
- Estendendo a classe de thread
- Implementando uma interface executável
Criando um Thread Estendendo a Classe Thread
Alguns métodos de classe de thread e suas funções são fornecidos abaixo.
- getName() : Para obter o nome do thread
- getPriority(): Para obter a prioridade do thread
- is Alive(): para descobrir se um thread está em execução
- join(): espera o término de uma thread
- run() : Ponto de entrada do thread
- sleep(): Para suspender um thread por uma janela de tempo específica.
- start() : Para ativar um thread por meio de seu método run().
Passo 1 : Substitua o método run() fornecido na classe de thread. Isso funciona como o ponto de entrada para o encadeamento, e toda a lógica do programa deve ser encerrada em 4this.
A sintaxe do método run() é a seguinte:
execução nula pública ( )
Passo 2: Inicie o objeto thread pelo método start() cuja sintaxe é void start() .
Aqui estão exemplos de um programa multithreading em Java:
Exemplo 1:
class MultithreadingDemo estende Thread{
public void executar(){
System.out.println(“Meu thread está em execução.”);
}
public static void main(String args[]){
MultithreadingDemo obj=new MultithreadingDemo();
obj.start();
}
}
A saída do programa acima será:
Meu tópico está rodando.
Exemplo 2:
class Count estende Thread
{
Contar()
{
super(“meu tópico está se estendendo”);
System.out.println(“minha thread foi criada” + this);
começar();
}
execução pública void()
{
tentar
{
for (int i=0 ;i<10;i++)
{
System.out.println(“Imprimindo a contagem” + i);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
System.out.println(“minha thread foi interrompida”);
}
System.out.println(“Meu tópico acabou” );
}
}
Exemplo de extensão de classe
{
public static void main(String args[])
{
Conta cnt = new Conta();
tentar
{
while(cnt.isAlive())
{
System.out.println(“A thread principal estará ativa até que a thread filha viva”);
Thread.sleep(1500);
}
}
catch(InterruptedException e)
{
System.out.println(“A thread principal foi interrompida”);
}
System.out.println(“A execução da thread principal foi encerrada” );
}
}
A saída do programa acima será
meu thread é criadoThread[meu thread executável,5,main]
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 0
Imprimindo a contagem 1
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 2
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 3
Imprimindo a contagem 4
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 5
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 6
Imprimindo a contagem 7
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 8
O encadeamento principal estará ativo até que o encadeamento filho viva
Imprimindo a contagem 9
minha execução de thread foi encerrada
A execução do encadeamento principal é encerrada
Criando um thread implementando uma interface executável
Há três passos importantes a serem seguidos ao usar este método.
Etapa 1 : Um método run() deve ser implementado por uma interface executável. Este método run() atua como o ponto de entrada para o encadeamento e deve conter toda a lógica do programa.
A sintaxe para o método run() é
execução nula pública ( )
Etapa 2: Um objeto thread deve ser ativado usando o construtor fornecido abaixo.
Thread(Runnable threadObj, String threadName);
Aqui threadObj atua como a classe que implementa a interface executável, e o nome do encadeamento é o nome dado ao novo encadeamento.
Passo 3: Após criar o objeto thread, ele pode ser iniciado pelo método start() que executa o método run().
A sintaxe do método start() é a seguinte.
void inicio();
Um exemplo de criação de um thread implementando uma interface executável pode ser encontrado aqui .
Para saber mais sobre Java multithreading e desenvolvimento de software, recomendamos a inscrição no Programa de Pós-Graduação Executiva em Desenvolvimento de Software oferecido pelo IIIT Bangalore em associação com upGrad.
O Executive PG Program in Software Development é um programa on-line de 13 meses projetado para ajudar profissionais que trabalham a dar um salto gigantesco em suas carreiras por meio de estudos de caso e projetos relevantes para o setor. O programa também inclui mais de dez sessões ao vivo de especialistas do setor para ajudar os candidatos a aprender melhor.
O programa inclui projetos do setor para ajudar os candidatos a ter experiência prática e exposição adequada ao setor para tornar seu aprendizado relevante e prático. A conclusão do programa recompensará os candidatos com a cobiçada certificação IIIT B e o status de ex-alunos.
O programa vem com suporte de colocação de 360 graus do upGrad que impactou mais de 40.000 alunos pagos de todos os cantos do mundo para tornar as coisas ainda melhores. O upGrad tem uma base de alunos de mais de 85 países, oferecendo uma oportunidade inestimável de ter uma rede global de colegas para os candidatos.
Qual é a diferença entre multitarefa e multithreading em Java?
Multitarefa é o processo pelo qual muitas tarefas podem ser executadas simultaneamente, e multithreading é o processo de execução de vários threads ao mesmo tempo, com cada thread executando uma tarefa diferente.
A herança múltipla é suportada por Java?
A linguagem de programação Java suporta herança múltipla, um processo no qual uma classe implementa mais de uma interface. Uma classe pode ter diferentes implementações de um método (padrão ou estático) nas interfaces. A herança múltipla em Java pode ser implementada apenas com interfaces e não com classes, ao contrário da linguagem C++.
O multithreading pode melhorar o desempenho do Java?
O multithreading melhora o desempenho do Java, permitindo que várias CPUs atendam ao mesmo problema. Isso não apenas acelera o processo, mas também ajuda na solução eficiente de problemas.