Maison > Java > javaDidacticiel > Comment les InterruptedExceptions doivent-elles être gérées en Java ?

Comment les InterruptedExceptions doivent-elles être gérées en Java ?

Barbara Streisand
Libérer: 2024-12-30 03:34:23
original
188 Les gens l'ont consulté

How Should InterruptedExceptions Be Handled in Java?

Gestion des interruptions en Java : deux approches et bonnes pratiques

En Java, la gestion de l'InterruptedException est cruciale lorsqu'il s'agit de méthodes qui peuvent lever cette exception. Deux approches courantes pour gérer cette interruption sont :

Propagation de l'interruption (première approche)

try {
 // ...
} catch (InterruptedException e) { 
   Thread.currentThread().interrupt(); 
}
Copier après la connexion

Cette approche convient lorsque l'InterruptedException représente un résultat valide de la méthode et doit être propagée à l'appelant. Par exemple, si une méthode effectue un appel réseau bloquant qui lève InterruptedException, il est logique de laisser cette exception se propager, indiquant que l'opération a été interrompue.

Capturer et définir l'indicateur d'interruption (deuxième approche)

try {
 //...
} catch (InterruptedException e) {
   Thread.currentThread().interrupt();
   throw new RuntimeException(e);
}
Copier après la connexion

Cette approche est préférée lorsque la méthode ne peut pas produire un résultat valide en cas d'interruption et doit se terminer. En définissant l'indicateur d'interruption (Thread.currentThread().interrupt()), cela garantit que le thread reste interrompu, informant l'appelant de l'interruption.

Décider de la meilleure approche

Le approprié L'approche dépend de la situation :

  • Propagation de l'exception : S'il est logique que la méthode permette interruption et qu'une valeur de retour normale ne peut pas être produite (par exemple, blocage d'un appel réseau), déclarez la méthode avec throws InterruptedException et laissez l'exception se propager.
  • Capturer et définir l'indicateur d'interruption : Si le La méthode ne peut pas terminer l'opération ou renvoyer un résultat valide, intercepter l'exception, définir l'indicateur d'interruption et lancer un runtime exception.

Exemple (deuxième approche)

void printSum(Server server) {
     try {
         int sum = computeSum(server);
         System.out.println("Sum: " + sum);
     } catch (InterruptedException e) {
         Thread.currentThread().interrupt();  // set interrupt flag
         System.out.println("Failed to compute sum");
     }
}
Copier après la connexion

Ici, la méthode printSum ne peut pas terminer son opération si elle est interrompue, elle intercepte donc l'InterruptedException, définit l'indicateur d'interruption et imprime un message alternatif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal