Punto muerto en Java

Punto muerto en Java
Java proporciona un concepto de lectura múltiple que permite que un proceso ejecute más de un hilo al mismo tiempo. Multithreading proporciona una amplia gama de beneficios, como la máxima utilización de la CPU, el ahorro de tiempo, disminución del costo de mantenimiento, etc. Sin embargo, también tiene algunas desventajas y entre ellas, la limitación más común es que múltiples hilos entran en un estado de espera y están bloqueados para siempre y esta situación se llama un punto muerto en Java.

En este artículo, vamos a aprender los aspectos de los puntos muertos en Java:

  • ¿Qué es un punto muerto??
  • Cuándo y dónde puede ocurrir un punto muerto
  • Ejemplos de punto muerto
  • Cómo evitar un punto muerto en Java

Así que comencemos!

¿Qué es un punto muerto??

Deadlock describe una situación en la que dos hilos más están tratando de acceder al mismo recurso simultáneamente y, como resultado, nadie obtiene el recurso y finalmente se bloquea para siempre.

Cuándo y dónde puede ocurrir un punto muerto

En Java, el escenario de punto muerto solo puede ocurrir en el entorno multiproceso donde más de un hilo se ejecuta al mismo tiempo. Además, una palabra clave sincronizada puede causar un punto muerto en Java.

De la figura anterior, podemos observar que Thread1 está esperando que Thread2 libere los recursos y viceversa.

Ejemplos de punto muerto

Consideremos el ejemplo a continuación para una comprensión profunda de cómo ocurre un punto muerto en Java:

clase pública DeadlockExample
public static void main (string [] args)
Final String Res1 = "Primer recurso";
String final res2 = "segundo recurso";
Thread Thread1 = new Thread ()
public void run ()
sincronizado (res1)
Sistema.afuera.println ("hilo 1: bloqueado el res1");
intentar
Hilo.Sleep (2000);
catch (excepcion excep)

sincronizado (res2)
Sistema.afuera.println ("hilo 1: bloqueado el res2");



;
Thread Thread2 = new Thread ()
public void run ()
sincronizado (res2)
Sistema.afuera.println ("hilo 2: bloqueado el res2");
intentar
Hilo.Sleep (2000);
catch (excepcion excep)

sincronizado (res1)
Sistema.afuera.println ("hilo 2: bloqueado el res1");



;
hilo.comenzar();
hilo2.comenzar();

En este ejemplo, tenemos dos hilos Thread1 y Thread2, tanto los hilos inician como llaman al método run ().

El siguiente será la salida del fragmento anterior:

Del fragmento anterior, está claro que ambos hilos se bloquearon entre sí.

Cómo evitar un punto muerto en Java

A continuación se muestra la lista de preveniones que se pueden adoptar para evitar un punto muerto en Java:

  • Evite el uso de cerraduras anidadas e innecesarias.
  • Adquirir las cerraduras en el mismo orden.
  • Use uniones de hilo para evitar el punto muerto i.mi., Libere un bloqueo después de un período de tiempo de espera.

Conclusión

Deadlock describe una situación en la que dos hilos más están tratando de acceder al mismo recurso simultáneamente y, como resultado, nadie obtiene el recurso y finalmente se bloquea para siempre. En Java, un punto muerto ocurre solo en el entorno multiproceso donde más de un hilo se ejecuta al mismo tiempo. Además, una palabra clave sincronizada puede causar un punto muerto en Java. En Java, un punto muerto no se puede resolver por completo, sin embargo, se puede evitar adoptando algunas precauciones/reglas necesarias e.gramo. Evitar el uso de cerraduras innecesarias, cerraduras anidadas, etc.

Este artículo presenta una descripción detallada de lo que son los puntos muertos en Java, cómo ocurren los puntos muertos y cómo evitar los puntos muertos en Java.