Wenn ein Deadlock auftritt ich den Sperr Thread zu unterbrechen will ...
Sie eine periodische Aufgabe für Deadlocks zu überprüfen implementieren könnte und Call (wo Deadlocks java intrinsische oder Lock
basieren) interrupt
für alle Threads, die am Szenario beteiligt sind. Dies hat jedoch keine Garantie, dass es Ihr Problem löst. Es ist wahrscheinlich das Szenario, das gerade wieder passieren wird. Details finden Sie unter Dr Heinz's article on a deadlock detector.
Wenn es tatsächlich gibt, gibt es keine Garantie, dass interrupt
sogar einen blockierten Prozess wie diesen freigeben wird. Es ist ein weitaus besserer Ansatz, um das Deadlock-Szenario zu vermeiden, indem beispielsweise Locks mit Timeouts und Retry-Strategien oder "Try Before You Buy" -Ansätze verwendet werden.
und ich möchte den Stack-Trace diesen Thread log ...
Wenn Sie dies programmatisch wieder tun wollen, Dr. Heinz Beispiel folgen. Wenn nicht, generieren Sie einfach den Thread-Dump, wenn Sie das Problem erkannt haben.
Gibt es eine Möglichkeit, wie können wir die Stack-Ablaufverfolgung eines Threads außerhalb dieses Threads in Java finden?
Ja und nein. Sie können die Threads von anderen VMs ablegen, aber ihre Stack-Traces sind möglicherweise nicht so nützlich, wie Sie vielleicht denken, um die Ursachen für Ihren Deadlock zu ermitteln. Wenn ein echter Deadlock erkannt wurde (von der JVM selbst auf dem Thread-Dump von Ihre Anwendungen VM) sollten Sie alles, was Sie benötigen, um die Ursache (mehr oder weniger) zu debuggen.
Sie meinen, Sie wollen Deadlock erkennen und wiederherstellen? Niemals getan, aber eine Stack-Trace für das klingt nicht wie der richtige Weg zu mir .. –
Ich brauche die Stack-Trace, so dass ich weiß, wo der Thread stecken und kann das Problem beheben, so dass die Anwendung ganz danach funktioniert Neustart. Jedoch möchte ich den blockierenden Thread unterbrechen, damit die Anwendung funktioniert, bis ich etwas Zeit finde, das Problem zu beheben und es freizugeben. – Palo