2010-08-21 8 views
9

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?

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