Wenn meine Anwendung bereit ist, zu verlassen, entweder durch ein Fenster zu schließen oder die System.exit() -Methode aufgerufen wird. Muss ich die von mir erstellten Threads manuell stoppen oder kümmert sich Java darum?Muss ich manuell Threads in Java zu stoppen?
9
A
Antwort
11
In Fällen verwenden Sie System.exit(). Alle Threads stoppen, egal ob sie Daemon sind oder nicht.
Andernfalls stoppt die JVM automatisch alle Threads, die von Thread.setDaemon (true) festgelegte Daemon-Threads sind. Mit anderen Worten werden die Jvm nur beendet werden, wenn nur Fäden verbleiben, sind alle Daemon-Threads oder keine an allen Fäden.
Betrachten Sie das folgende Beispiel, es auch nach dem Hauptverfahren zurückkehrt läuft weiter. aber wenn man es auf Daemon gesetzt, es wird beendet, wenn das Hauptverfahren (der Haupt-Thread) endet.
public class Test {
public static void main(String[] arg) throws Throwable {
Thread t = new Thread() {
public void run() {
while(true) {
try {
Thread.sleep(300);
System.out.println("Woken up after 300ms");
}catch(Exception e) {}
}
}
};
// t.setDaemon(true); // will make this thread daemon
t.start();
System.exit(0); // this will stop all threads whether are not they are daemon
System.out.println("main method returning...");
}
}
3
Wenn Sie Threads vor dem Beenden beenden möchten anmutig, Shutdown Hooks kann eine Wahl sein.
wie folgt aussieht:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//Stop threads }
});
See: hook-design
Verwandte Themen
- 1. Spark Workers manuell stoppen
- 2. Muss ich in Android Threads löschen
- 3. Einen Thread in Java stoppen?
- 4. Muss ich eine Mangustenverbindung manuell schließen?
- 5. Muss ich den Eingabestream manuell schließen?
- 6. nicht alle Threads in GDB stoppen
- 7. Java-Threads
- 8. controlling threads in java
- 9. Wie alle laufenden Threads außer dem aktuellen Thread zu stoppen?
- 10. Um Java-Handler zu stoppen
- 11. Muss ich mich von (manuell abonnierten) Ereignissen in asp.net abmelden?
- 12. Starten Sie JBOSS jboss-eap-6.3.2 manuell zu stoppen?
- 13. Wie könnte ich Jython-Threads als Java-Threads verwenden?
- 14. Erstellen zu viele Threads in Java
- 15. Schleife in Java stoppen
- 16. Muss ich den Google Analytics-Tracker in applicationWillTerminate stoppen? (iOS)
- 17. Muss ich sperren mit Ganzzahlen in C++ - Threads
- 18. Dangling Threads in Java
- 19. Java Browser-Plugin oder manuell zu installieren Java
- 20. C#: Stoppen eines Threads nach einer Exception
- 21. Welche Teile eines Ruby DSL muss ich manuell erstellen?
- 22. Stoppen MouseMoved Ereignis in Java
- 23. Wie ordnet die Sun JVM Java-Threads Windows-Threads zu?
- 24. Starten und Stoppen von Ruby-Threads
- 25. beschäftigt warten threads in java
- 26. Muss ich Zend_Form Felder nach dem Post manuell wieder füllen?
- 27. Muss Arbeiter auf Heroku manuell starten?
- 28. Wie erstelle ich Daemon-Threads?
- 29. Muss EF upsert manuell durchgeführt werden?
- 30. wie zu stoppen und starten springenden Ball in Java