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
Barbara Streisandoriginal
2024-12-30 03:34:23190parcourir

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(); 
}

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);
}

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");
     }
}

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!

Déclaration:
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