Langage

Runtime.AddShutdownHook(Thread) Méthode

Définition

Inscrit un nouveau hook d’arrêt de machine virtuelle.

[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

Paramètres

hook
Thread

Objet initialisé mais non démarré Thread

Attributs

Exceptions

si le crochet a déjà été démarré ou s’il a déjà été inscrit.

si la machine virtuelle est déjà arrêtée.

Remarques

Inscrit un nouveau hook d’arrêt de machine virtuelle.

La machine virtuelle Java s’arrête en réponse à deux types d’événements :

<ul>

<li> Le programme se termine normalement, lorsque le dernier thread non démon quitte ou lorsque la #exit exit méthode (équivalent, System#exit(int) System.exit) est appelée, ou

<li> La machine virtuelle est arrêtée en réponse à une interruption utilisateur, telle que la saisie ^Cou un événement à l’échelle du système, tel que la déconnexion de l’utilisateur ou l’arrêt du système.

</ul>

Un hook d’arrêt est simplement un thread initialisé mais non démarrage. Lorsque la machine virtuelle commence sa séquence d’arrêt, elle démarre tous les hooks d’arrêt inscrits dans un ordre non spécifié et les laisse s’exécuter simultanément. Lorsque tous les crochets ont terminé, il s’arrêtera ensuite. Notez que les threads de démon continueront à s’exécuter pendant la séquence d’arrêt, car les threads non démon si l’arrêt a été lancé en appelant la #exit exit méthode.

Une fois la séquence d’arrêt commencée, elle ne peut être arrêtée qu’en appelant la #halt halt méthode, ce qui met fin de force à la machine virtuelle.

Une fois la séquence d’arrêt commencée, il est impossible d’inscrire un nouveau hook d’arrêt ou de désinscrire un crochet précédemment inscrit. La tentative d’une de ces opérations entraîne la levée d’une IllegalStateException opération.

Les crochets d’arrêt s’exécutent à un moment délicat dans le cycle de vie d’une machine virtuelle et doivent donc être codés défensivement. Ils doivent, en particulier, être écrits pour être thread-safe et éviter les interblocages dans la mesure du possible. Ils ne doivent pas non plus s’appuyer sur les services qui ont peut-être enregistré leurs propres crochets d’arrêt et peuvent donc eux-mêmes se trouver dans le processus d’arrêt. Les tentatives d’utilisation d’autres services basés sur des threads tels que le thread de distribution d’événements AWT, par exemple, peuvent entraîner des blocages.

Les crochets d’arrêt doivent également terminer leur travail rapidement. Lorsqu’un programme appelle #exit exit l’attente est que la machine virtuelle s’arrête et quitte rapidement. Lorsque la machine virtuelle est arrêtée en raison de la déconnexion de l’utilisateur ou de l’arrêt du système d’exploitation sous-jacent, le système d’exploitation sous-jacent ne peut autoriser qu’une durée fixe d’arrêt et de sortie. Il est donc déconseillé de tenter toute interaction utilisateur ou d’effectuer un calcul de longue durée dans un hook d’arrêt.

Les exceptions non interceptées sont gérées dans les hooks d’arrêt comme dans n’importe quel autre thread, en appelant la ThreadGroup#uncaughtException uncaughtException méthode de l’objet du ThreadGroup thread. L’implémentation par défaut de cette méthode imprime la trace System#err de la pile de l’exception et met fin au thread ; elle n’entraîne pas la fermeture ou l’arrêt de la machine virtuelle.

Dans de rares cas, la machine virtuelle peut abandonner, c’est-à-dire arrêter l’exécution sans s’arrêter correctement. Cela se produit lorsque la machine virtuelle est arrêtée en externe, par exemple avec le SIGKILL signal sur Unix ou l’appel TerminateProcess sur Microsoft Windows. La machine virtuelle peut également abandonner si une méthode native est endommagée, par exemple, en endommageant les structures de données internes ou en tentant d’accéder à la mémoire inexistante. Si la machine virtuelle abandonne, aucune garantie ne peut être faite sur l’exécution ou non de crochets d’arrêt.

Ajouté dans la version 1.3.

Java documentation pour java.lang.Runtime.addShutdownHook(java.lang.Thread).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

S’applique à