Runtime.AddShutdownHook(Thread) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Registra un nuevo enlace de apagado de máquina virtual.
[Android.Runtime.Register("addShutdownHook", "(Ljava/lang/Thread;)V", "GetAddShutdownHook_Ljava_lang_Thread_Handler")]
public virtual void AddShutdownHook(Java.Lang.Thread? hook);
[<Android.Runtime.Register("addShutdownHook", "(Ljava/lang/Thread;)V", "GetAddShutdownHook_Ljava_lang_Thread_Handler")>]
abstract member AddShutdownHook : Java.Lang.Thread -> unit
override this.AddShutdownHook : Java.Lang.Thread -> unit
Parámetros
- hook
- Thread
Objeto inicializado pero sin Thread iniciar
- Atributos
Excepciones
si el enlace ya se ha iniciado o si ya se ha registrado.
si la máquina virtual ya está apagando.
Comentarios
Registra un nuevo enlace de apagado de máquina virtual.
El Java máquina virtual se apaga en respuesta a dos tipos de eventos:
<ul>
<li> El programa sale normalmente, cuando se cierra el último subproceso no demonio o cuando #exit exit se invoca (equivalentemente, System#exit(int) System.exit) o
<li> La máquina virtual finaliza en respuesta a una interrupción del usuario, como escribir ^Co un evento en todo el sistema, como el cierre del sistema o el cierre del sistema.
</ul>
Un enlace de apagado es simplemente un subproceso inicializado pero sin iniciar. Cuando la máquina virtual comienza su secuencia de apagado, iniciará todos los enlaces de apagado registrados en algún orden no especificado y les permitirá ejecutarse simultáneamente. Cuando todos los ganchos hayan terminado, se detendrán. Tenga en cuenta que los subprocesos de demonio seguirán ejecutándose durante la secuencia de apagado, ya que los subprocesos que no son de demonio si se inició el apagado invocando el #exit exit método .
Una vez iniciada la secuencia de apagado, solo se puede detener invocando el #halt halt método , que finaliza forzosamente la máquina virtual.
Una vez iniciada la secuencia de apagado, es imposible registrar un nuevo enlace de apagado o anular el registro de un enlace registrado previamente. Si se intenta cualquiera de estas operaciones, se producirá una IllegalStateException excepción .
Los enlaces de apagado se ejecutan en un momento delicado en el ciclo de vida de una máquina virtual y, por lo tanto, deben codificarse de forma defensiva. Deben escribirse, en particular, para que sean seguras para subprocesos y evitar interbloqueos en la medida de lo posible. Tampoco deben confiar ciegamente en los servicios que pueden haber registrado sus propios enlaces de apagado y, por lo tanto, pueden estar en proceso de apagado. Los intentos de usar otros servicios basados en subprocesos, como el subproceso de distribución de eventos AWT, por ejemplo, pueden provocar interbloqueos.
Los enlaces de apagado también deben finalizar su trabajo rápidamente. Cuando un programa invoca #exit exit la expectativa es que la máquina virtual se apague y salga rápidamente. Cuando la máquina virtual finaliza debido al cierre de sesión del usuario o al apagado del sistema, el sistema operativo subyacente solo puede permitir una cantidad fija de tiempo en el que apagar y salir. Por lo tanto, es inadvisible intentar cualquier interacción del usuario o realizar un cálculo de larga duración en un enlace de apagado.
Las excepciones no detectadas se controlan en enlaces de apagado igual que en cualquier otro subproceso invocando el ThreadGroup#uncaughtException uncaughtException método del objeto del ThreadGroup subproceso. La implementación predeterminada de este método imprime el seguimiento de pila de la excepción en System#err y finaliza el subproceso; no hace que la máquina virtual salga o detenga.
En raras circunstancias, la máquina virtual puede anularse, es decir, dejar de ejecutarse sin apagarse limpiamente. Esto ocurre cuando la máquina virtual finaliza externamente, por ejemplo con la SIGKILL señal en Unix o la TerminateProcess llamada en Microsoft Windows. La máquina virtual también puede anularse si un método nativo pasa por, por ejemplo, dañando estructuras de datos internas o intentando acceder a la memoria inexistente. Si la máquina virtual anula, no se puede garantizar si se ejecutarán o no enlaces de apagado.
Agregado en la versión 1.3.
Java documentación para java.lang.Runtime.addShutdownHook(java.lang.Thread).
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.