Deadlock in Java

Deadlock in Java
Java bietet ein Konzept des Multithreading, mit dem ein Prozess gleichzeitig mehr als einen Thread ausführen kann. Multithreading bietet eine breite Palette von Vorteilen wie maximale CPU -Auslastung, Sparzeit, senkte Wartungskosten usw. Es hat jedoch auch einige Nachteile, und unter ihnen ist die häufigste Einschränkung, dass mehrere Fäden in einen Wartezustand gehen und für immer blockiert werden und diese Situation in Java als Deadlock bezeichnet wird.

In dieser Beschreibung lernen wir die folgenden Aspekte von Deadlocks in Java:

  • Was ist ein Deadlock?
  • Wann und wo ein Deadlock auftreten kann
  • Beispiele für Deadlock
  • Wie man einen Deadlock in Java verhindern

So lass uns anfangen!

Was ist ein Deadlock?

Deadlock beschreibt eine Situation, in der zwei weitere Themen versuchen, gleichzeitig auf die gleiche Ressource zuzugreifen, und infolgedessen erhält niemand die Ressource und wird schließlich für immer blockiert.

Wann und wo ein Deadlock auftreten kann

In Java kann das Deadlock -Szenario nur in der Multithread -Umgebung auftreten, in der mehr als ein Thread gleichzeitig ausgeführt wird. Darüber hinaus kann ein synchronisiertes Schlüsselwort eine Sackgasse in Java verursachen.

Aus der obigen Abbildung können wir beobachten, dass Thread1 darauf wartet, dass Thread2 die Ressourcen freigibt und umgekehrt.

Beispiele für Deadlock

Betrachten wir das untergegebene Beispiel für ein tiefes Verständnis dafür, wie ein Deadlock in Java auftritt:

öffentliche Klasse Deadlockexample
public static void main (String [] args)
Finale String res1 = "Erste Ressource";
endgültige Zeichenfolge res2 = "zweite Ressource";
Thread Thread1 = neuer Thread ()
public void run ()
synchronisiert (res1)
System.aus.println ("Thread 1: gesperrt den res1");
versuchen
Gewinde.Schlaf (2000);
catch (Ausnahme excep)

synchronisiert (res2)
System.aus.println ("Thread 1: gesperrt das res2");



;
Thread 2 = neuer Thread ()
public void run ()
synchronisiert (res2)
System.aus.println ("Thread 2: gesperrt das res2");
versuchen
Gewinde.Schlaf (2000);
catch (Ausnahme excep)

synchronisiert (res1)
System.aus.println ("Thread 2: gesperrt den res1");



;
Thread1.Start();
Thread2.Start();

In diesem Beispiel haben wir zwei Threads Thread1 und Thread2, beide Threads starten und rufen die Run () -Methode auf.

Im Folgenden finden Sie die Ausgabe für den obigen Snippet:

Aus dem obigen Snippet ist klar, dass beide Fäden sich gegenseitig verschlossen haben.

Wie man einen Deadlock in Java verhindern

Im Folgenden finden Sie die Liste der Vorsorge, die angenommen werden können, um einen Deadlock in Java zu vermeiden:

  • Vermeiden Sie die Verwendung von verschachtelten und unnötigen Schlössern.
  • Erwerben Sie die Schlösser in der gleichen Reihenfolge.
  • Verwenden Sie Fadenverbindungen, um die Deadlock zu vermeiden.e., Lösen Sie ein Schloss nach einer Zeitüberschreitungsperiode.

Abschluss

Deadlock beschreibt eine Situation, in der zwei weitere Themen versuchen, gleichzeitig auf die gleiche Ressource zuzugreifen, und infolgedessen erhält niemand die Ressource und wird schließlich für immer blockiert. In Java tritt ein Deadlock nur in der multitHhread -Umgebung auf, in der mehr als ein Thread gleichzeitig ausgeführt wird. Darüber hinaus kann ein synchronisiertes Schlüsselwort eine Sackgasse in Java verursachen. In Java kann ein Deadlock jedoch nicht vollständig gelöst werden. Er kann jedoch vermieden werden, indem einige erforderliche Vorsichtsmaßnahmen/Regeln e übernommen werden. E.G. Vermeiden Sie die Verwendung unnötiger Schlösser, verschachtelten Schlösser usw.

Dieses Schreiben enthält einen detaillierten Überblick über die Deadlocks in Java, wie Deadlocks auftreten und wie die Deadlocks in Java vermieden werden können.