in

Interbloqueo en Java – javatpoint

java deadlock

El interbloqueo en Java es parte del subproceso múltiple. El interbloqueo puede ocurrir en una situación en la que un subproceso está esperando un bloqueo de objeto, que es adquirido por otro subproceso y el segundo subproceso está esperando un bloqueo de objeto que es adquirido por el primer subproceso. Dado que ambos subprocesos están esperando que el otro libere el bloqueo, la condición se denomina interbloqueo.

Deadlock en Java

Ejemplo de interbloqueo en Java

TestDeadlockExample1.java

Producción:

Thread 1: locked resource 1
        Thread 2: locked resource 2

Interbloqueos más complicados

Un interbloqueo también puede incluir más de dos subprocesos. La razón es que puede resultar difícil detectar un punto muerto. A continuación, se muestra un ejemplo en el que cuatro subprocesos se han bloqueado:

El hilo 1 bloquea A, espera B

El hilo 2 bloquea B, espera C

El hilo 3 bloquea C, espera D

El hilo 4 bloquea D, espera A

El hilo 1 espera el hilo 2, el hilo 2 espera el hilo 3, el hilo 3 espera el hilo 4 y el hilo 4 espera el hilo 1.

¿Cómo evitar el estancamiento?

La solución a un problema se encuentra en sus raíces. En el punto muerto es el patrón de acceso a los recursos A y B, es el problema principal. Para resolver el problema, simplemente tendremos que reordenar las declaraciones donde el código está accediendo a recursos compartidos.

DeadlockSolved.java

Producción:

En el código anterior, la clase DeadlockSolved resuelve el tipo de situación de interbloqueo. Ayudará a evitar interbloqueos y, si se encuentran, a resolverlos.

¿Cómo evitar el interbloqueo en Java?

Los interbloqueos no se pueden resolver por completo. Pero podemos evitarlos siguiendo las reglas básicas que se mencionan a continuación:

  1. Evite las cerraduras anidadas: Debemos evitar dar bloqueos a varios subprocesos, esta es la razón principal de una condición de interbloqueo. Normalmente sucede cuando le da bloqueos a varios subprocesos.
  2. Evite bloqueos innecesarios: Los bloqueos deben darse a los hilos importantes. Dar bloqueos a los subprocesos innecesarios que causan la condición de interbloqueo.
  3. Usando Thread Join: Un interbloqueo suele ocurrir cuando un hilo está esperando que el otro termine. En este caso, podemos usar entrar con un tiempo máximo que tardará un hilo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Promesas de JavaScript

inorder traversal

Estructura de datos y algoritmos: cruce de árboles