2012-01-04 6 views

Respuesta

30

Por lo que sé, voy a explicar esto a continuación. Puedes buscarlo en Google y encontrar mucha información también.

addShutdownHook() registrará algunas acciones que se realizarán en la terminación de un programa. El programa que inicia termina de dos maneras:

  1. el hilo principal (Root) finaliza su contexto de ejecución;
  2. el programa resuelve una situación inesperada, por lo que no puede continuar.

Si agrega un ShutdownHook, el gancho iniciará una secuencia que comenzará a ejecutarse en el momento de la terminación solamente. Por ejemplo:

Runtime.getRuntime().addShutdownHook(new Thread() { 
     public void run() { 
     System.out.println("Running Shutdown Hook"); 
     } 
    }); 

imprimirá un Running Shutdown Hook en el momento de la terminación del programa en cualquier momento. Incluso puede llamar al System.exit(0).

Por ejemplo, puede google, hay suficientes. Y la pregunta "¿cuándo deberías usar esto? Es como preguntar '¿Qué hace catch en una declaración try-catch'?

Es posible que tenga muchas situaciones como:

  • su programa había creado muchos archivos temporales en el sistema de archivos que desea eliminarla;
  • necesita enviar una señal de socorro a otro proceso/máquina antes de terminar;
  • ejecutar acciones de limpieza, registro o acciones de errores posteriores en comportamientos inesperados.

Todo esto será necesario en algún punto del tiempo.

Para ejemplos se puede ir aquí habrá una carrera de rosca cuando `JVM` sí se shutdowned Example 1 o Example 2

+0

Las razones que da para la terminación son inexactas. Vea la respuesta de Buhake para la versión correcta. – meriton

8

Usted única preocupación acerca de ganchos de cierre cuando se desea que suceda algo cuando se produce una parada en la máquina virtual.

De Javadoc:

La máquina virtual Java se cierra en respuesta a dos tipos de eventos:

  • El programa sale normalmente, cuando las últimas salidas de rosca no daemon o cuando el se invoca el método exit (equivalentemente, System.exit) o ​​
  • La máquina virtual finaliza en respuesta a una interrupción del usuario, como escribir^C, o un evento en todo el sistema, como el cierre de sesión del usuario o apagado del sistema.

Por lo tanto, un gancho de cierre es un inicializado y sin empezar hilo que se ejecuta cuando se produce un cierre JVM.

Existen ejemplos populares de shutdown hooks en servidores de aplicaciones (como JBoss AS). Cuando presiona Ctrl + C, la JVM llama a todos los ganchos de cierre Runtime registrados (como los ganchos de cierre de JBoss) antes de salir.

+0

sino cómo. – garg10may

+0

Cuando la JVM ya está cerrada, todos los subprocesos ya se habrán terminado. No entiendo tu pregunta. –

+1

@ garg10may: justo antes de que la JVM se apague, se invocará el código presente dentro de shutDownHook. El método addShutDownHook toma un hilo como argumento de entrada. Puede especificar cualquier tarea de la que quiera ocuparse antes de que la JVM final salga de este hilo. –

2

Un caso es, si cualquier subproceso daemon que debe detenerse antes de su cierre de jvm (o) cualquier otro subproceso secundario (principalmente subprocesos de daemon) debe salir con gracia, se escribirá shutdown hook y se ejecutará utilizando el comando anterior código. Aquí hay una discusión interesante que tuvimos en SO hace un par de días. Shutdown hook

Cuestiones relacionadas