Runtime.AddShutdownHook(Thread) Método

Definição

Registra um novo gancho de desligamento 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

Um objeto inicializado, mas não iniciado Thread

Atributos

Exceções

se o gancho já tiver sido iniciado ou se ele já tiver sido registrado.

se a VM já estiver sendo fechada.

Comentários

Registra um novo gancho de desligamento de máquina virtual.

A máquina virtual Java é desligada em resposta a dois tipos de eventos:

<ul>

<li> O programa é encerrado normalmente, quando o último thread não daemon é encerrado ou quando o #exit exit método (equivalentemente) System#exit(int) System.exité invocado ou

<li> A máquina virtual é encerrada em resposta a uma interrupção do usuário, como digitação ^C, ou um evento em todo o sistema, como logoff do usuário ou desligamento do sistema.

</ul>

Um gancho de desligamento é simplesmente um thread inicializado, mas não iniciado. Quando a máquina virtual iniciar sua sequência de desligamento, ela iniciará todos os ganchos de desligamento registrados em alguma ordem não especificada e permitirá que eles sejam executados simultaneamente. Quando todos os ganchos terminarem, ele vai parar. Observe que os threads daemon continuarão a ser executados durante a sequência de desligamento, assim como threads não daemon se o desligamento tiver sido iniciado invocando o #exit exit método.

Depois que a sequência de desligamento for iniciada, ela poderá ser interrompida apenas invocando o #halt halt método, que encerra a máquina virtual à força.

Depois que a sequência de desligamento for iniciada, é impossível registrar um novo gancho de desligamento ou cancelar o registro de um gancho registrado anteriormente. A tentativa de qualquer uma dessas operações fará com que uma IllegalStateException seja gerada.

Os ganchos de desligamento são executados em um momento delicado no ciclo de vida de uma máquina virtual e, portanto, devem ser codificados defensivamente. Eles devem, em particular, ser escritos para serem thread-safe e evitar deadlocks na medida do possível. Eles também não devem depender cegamente dos serviços que podem ter registrado seus próprios ganchos de desligamento e, portanto, podem estar no processo de desligamento. Tentativas de usar outros serviços baseados em thread, como o thread de expedição de eventos AWT, por exemplo, podem levar a deadlocks.

Os ganchos de desligamento também devem concluir seu trabalho rapidamente. Quando um programa invoca #exit exit a expectativa é que a máquina virtual será prontamente desligada e encerrada. Quando a máquina virtual é encerrada devido ao logoff do usuário ou ao desligamento do sistema, o sistema operacional subjacente só pode permitir um período fixo de tempo para desligar e sair. Portanto, é desaprezível tentar qualquer interação do usuário ou executar uma computação de longa execução em um gancho de desligamento.

Exceções não capturadas são tratadas em ganchos de desligamento, assim como em qualquer outro thread, invocando o ThreadGroup#uncaughtException uncaughtException método do objeto do ThreadGroup thread. A implementação padrão desse método imprime o rastreamento System#err de pilha da exceção e encerra o thread; ele não faz com que a máquina virtual saia ou interrompa.

Em raras circunstâncias, a máquina virtual pode anular, ou seja, parar de executar sem desligar de forma limpa. Isso ocorre quando a máquina virtual é encerrada externamente, por exemplo, com o SIGKILL sinal no Unix ou a TerminateProcess chamada em Microsoft Windows. A máquina virtual também poderá anular se um método nativo der errado, por exemplo, corrompendo estruturas de dados internas ou tentando acessar memória inexistente. Se a máquina virtual for anulada, nenhuma garantia poderá ser feita sobre se os ganchos de desligamento serão executados ou não.

Adicionado em 1.3.

Java documentação para java.lang.Runtime.addShutdownHook(java.lang.Thread).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Aplica-se a