Wie man Java-Deadlock programmgesteuert generiert und wie man Deadlock analysiert

Veröffentlicht: 2013-07-03

Beispiel für eine Java-Thread-Sperre von Crunchify

Deadlock ist eine Programmiersituation, in der zwei oder mehr Threads für immer blockiert sind. Diese Situation tritt bei mindestens zwei Threads und zwei oder mehr Ressourcen auf.

Hier habe ich ein einfaches Programm geschrieben, das ein Deadlock-Szenario verursacht, und dann werden wir sehen, wie es analysiert wird.

Hier ist ein einfaches Java-Beispiel:

Ausgabe:

Während Ihre App wie im obigen Beispiel hängt, können Sie einen Thread-Dump abrufen und die Deadlock-Threads sehen.

Auf einem Mac können Sie beispielsweise entweder Ctrl-\ verwenden oder einfach jstack und die Prozess-ID verwenden, um den Thread-Dump abzurufen, wodurch sehr deutlich wird, wo sich der Deadlock befindet.

In diesem Beispiel sieht der Thread-Dump so aus:

Beachten Sie hier BLOCKED- und WAITING- threads => Deadlock -Situation hier.. Im nächsten Beispiel wird ein einfaches Java-Programm bereitgestellt, um den obigen Thread-Dump programmgesteuert zu generieren.