2010-08-21 13 views
9

Cuando mi aplicación está lista para salir, ya sea cerrando una ventana o invocando el método System.exit(). ¿Tengo que detener manualmente los hilos que pude haber creado o Java se encargará de eso por mí?¿Debo manualmente detener los hilos en Java?

Respuesta

11

En los casos que utiliza System.exit(). Todos los hilos se detendrán ya sea que sean demonios o no.

De lo contrario, la JVM detendrá automáticamente todos los hilos que son hilos daemon configurados por Thread.setDaemon (true). En otras palabras, el jvm solo saldrá cuando solo los hilos restantes sean todos hilos daemon o no hilos en absoluto.

Considere el siguiente ejemplo, continuará ejecutándose incluso después de que regrese el método principal. pero si lo configura en daemon, terminará cuando finalice el método principal (el hilo principal).

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

Si desea detener los hilos antes de salir con gracia, los ganchos de cierre pueden ser una opción.

parece:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
    //Stop threads } 
}); 

Ver: hook-design