Deadlock em Java

Deadlock em Java
Java fornece um conceito de multithreading que permite que um processo execute mais de um tópico ao mesmo tempo. O multithreading fornece uma ampla gama de benefícios, como a utilização máxima da CPU, economizando tempo, diminuindo o custo de manutenção, etc. No entanto, também tem algumas desvantagens e, entre elas, a limitação mais comum é que vários tópicos entram em um estado de espera e estão bloqueados para sempre e essa situação é chamada de impasse em java.

Neste artigo, vamos aprender os aspectos abaixo da listada de impasse em Java:

  • O que é um impasse?
  • Quando e onde um impasse pode ocorrer
  • Exemplos de impasse
  • Como evitar um impasse em java

Então vamos começar!

O que é um impasse?

Deadlock descreve uma situação em que mais dois tópicos estão tentando acessar o mesmo recurso simultaneamente e, como resultado, ninguém recebe o recurso e acaba sendo bloqueado para sempre.

Quando e onde um impasse pode ocorrer

Em Java, o cenário de impasse pode ocorrer apenas no ambiente multithread, onde mais de um tópico é executado ao mesmo tempo. Além disso, uma palavra -chave sincronizada pode causar um impasse em java.

Da figura acima, podemos observar que o Thread1 está esperando o Thread2 para lançar os recursos e vice -versa.

Exemplos de impasse

Vamos considerar o exemplo abaixo para uma compreensão profunda de como ocorre um impasse em Java:

classe pública deadlockexample
public static void main (string [] args)
final string res1 = "primeiro recurso";
final string res2 = "segundo recurso";
Thread Thread1 = new Thread ()
public void run ()
sincronizado (res1)
Sistema.fora.println ("Thread 1: bloqueado o res1");
tentar
Fio.Sleep (2000);
catch (exceção excepção)

sincronizado (res2)
Sistema.fora.println ("Thread 1: bloqueado o res2");



;
Thread Thread2 = new Thread ()
public void run ()
sincronizado (res2)
Sistema.fora.println ("Thread 2: bloqueado o res2");
tentar
Fio.Sleep (2000);
catch (exceção excepção)

sincronizado (res1)
Sistema.fora.println ("Thread 2: bloqueado o res1");



;
Thread1.começar();
Thread2.começar();

Neste exemplo, temos dois threads thread1 e thread2, ambos os threads iniciam e chamam o método run ().

A seguir será a saída para o trecho acima:

Do trecho acima, fica claro que ambos os fios se trancaram.

Como evitar um impasse em java

Abaixo está a lista de prevenções que podem ser adotadas para evitar um impasse em Java:

  • Evite o uso de bloqueios aninhados e desnecessários.
  • Adquirir as fechaduras na mesma ordem.
  • Use junções de thread para evitar o impasse i.e., Libere uma fechadura após um período de tempo limite.

Conclusão

Deadlock descreve uma situação em que mais dois tópicos estão tentando acessar o mesmo recurso simultaneamente e, como resultado, ninguém recebe o recurso e acaba sendo bloqueado para sempre. Em Java, um impasse ocorre apenas no ambiente multithread, onde mais de um tópico é executado ao mesmo tempo. Além disso, uma palavra -chave sincronizada pode causar um impasse em java. Em Java, um impasse não pode ser resolvido completamente, no entanto, pode ser evitado adotando algumas precauções/regras necessárias e.g. Evitando o uso de bloqueios desnecessários, bloqueios aninhados, etc.

Este artigo apresenta uma visão geral detalhada do que são impasse em java, como os impulsos ocorrem e como evitar os impasses em java.