Alternative zu Thread.stop() in Java 8?

Gibt es eine Möglichkeit zu zwingen, eine Thread zu stoppen, unter Java 8, jetzt, dass Thread.stop entfernt wurde? Dies beinhaltet zwingt ein thread wartet auf ein lock/synchronisiert/schlafen/warten/unendliche Schleife zu stoppen.

Dies ist gedacht als Teil eines watchdog für die Anwendung, die erkennen können, wenn es blockiert/eingefroren, zwingen, töten threads und dann speichern Sie den aktuellen Zustand zu vermeiden, Informationen verloren gehen - zwar gibt es eine hohe chance, diese Informationen, die korrupte aufgrund zu zwingen, einen thread zu beenden, ist es besser, eine Kopie der möglicherweise falschen Informationen, als es zu verlieren.

Versuchen, Sie zu speichern diese Informationen, ohne zu stoppen, eingesperrt threads ist unmöglich, da es zu speichern erfordert den Erwerb sperrt.

  • Kann man das mit shutdown-hooks dump core in Reaktion auf ein SIGQUIT, anstatt zu versuchen, zu identifizieren, Fehlverhalten von threads innerhalb einer VM?
  • Ich meine, die richtige Antwort ist: korrigieren Sie den code, die die Probleme verursacht, die macht, die Sie brauchen, um zu töten threads.
  • Thread.stop entfernt wurde? Was für tolle Neuigkeiten, das war eines der schrecklichsten, vile Methoden überhaupt. In deinem Fall: Niemand kann Sie zwingen, sich zu sperren, der beim speichern der Daten, müssen einige refactoring-für Sie sicher-und es ist natürlich fehleranfällig, aber das ist ein inhärentes problem in dem, was Sie zu tun versuchen.
  • dies ist ein watchdog, wenn die Dinge schief gehen. Leider, Sie tun, und früher war es möglich, sich besser zu Verhalten (versuchen zu stoppen anmutig) werden als dies mit java 8. Offensichtlich nicht Deadlocks wäre besser, aber mit komplexen Gewinde-code mit bis zu Hunderten von user-plugins nicht entworfen, um gefädelt werden, es scheint unausweichlich.
  • Sie "schief gehen" aufgrund von bugs und/oder ein schlechtes design, wenn das einzige Werkzeug, das Sie verwenden können, um das Problem zu beheben ist eine, die Sie sollten nicht verwendet haben und nicht mehr können. Zehntausende (konservativ) von anderen Stücken von software haben dieses problem nicht, und es ist unwahrscheinlich, du machst nichts besonders einzigartig (einige von uns).
  • Diese Frage enthält eine Fehlinformation: 1. Thread.stop() wurde nicht entfernt; 2. es ist veraltet und für lange Zeit keine änderung in Java 8 in dieser Hinsicht; 3. es wurde benutzt, alle zusammen dennoch, wenn auch weniger oft. docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#stop--
  • Das einzige, was passiert ist, ist, dass Thread.stop(Throwable) deaktiviert wurde (nicht entfernt!) so ist es nun wirft UnsupportedOperationException und nicht versuchen zu stoppen, einen thread.
  • Danke für die Aufklärung - wusste nicht, siehe dein Kommentar bis jetzt, aber ich habe markiert Holger ' s Antwort unter Angabe der gleichen Sache als richtig. Habe ich falsch verstanden, die docs nach meinem code verwenden .stop(Throwable) brach, und dachte nach .stop() entfernt worden war, aber auch nicht wirklich überprüfen.

InformationsquelleAutor Luna | 2014-04-26
Schreibe einen Kommentar