Quand Java Thread.sommeil jeter InterruptedException?
Quand Java Thread.sommeil jeter InterruptedException? Est-il sécuritaire de l'ignorer? Je ne le fais pas tout le multithreading. Je veux juste attendre quelques secondes avant de réessayer une opération.
- stackoverflow.com/questions/1024651/...
- Dépend dans quel sens tu veux dire "ignorer".
InterruptedException
est une exception interceptée, de sorte que vous ne pouvez pas compiler, à moins que vous manipulez ou déclarer ce type d'exception sur la méthode, qui rejoint ou dortThread
, ou des appelswait()
surObject
.
Vous devez vous connecter pour publier un commentaire.
Vous devriez généralement PAS ignorer l'exception. Jetez un oeil à l'article suivant:
Voir l'intégralité de l'article ici:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
Si un
InterruptedException
est jeté cela signifie que quelque chose veut interrompre (généralement de mettre fin) de ce thread. Ceci est déclenchée par un appel à l'threadsinterrupt()
méthode. L'attente de la méthode détecte et déclenche uneInterruptedException
de sorte que le code catch peut traiter la demande de mettre fin immédiatement et de ne pas avoir à attendre jusqu'à l'heure spécifiée est en place.Si vous l'utilisez dans un seul thread de l'application (et aussi dans certains multi-thread apps), cette exception ne sera jamais déclenché. L'ignorant par la présence d'un vide clause catch, je ne recommanderais pas. Le fait de lancer des
InterruptedException
efface l'interruption de l'état du thread, donc, si ce n'est pas manipulé correctement que les infos sont perdues. Par conséquent, je propose de lancer:Qui définit cet état nouveau. Après cela, le fini de l'exécution. Ce serait bon comportement, même les plus difficiles jamais utilisé.
Ce qui pourrait être mieux, c'est d'ajouter ceci:
...déclaration pour le bloc catch. Qui signifie qu'il ne doit jamais arriver. Donc, si le code est ré-utilisé dans un environnement où il peut arriver qu'il va se plaindre à ce sujet.
RuntimeException
.La Java des Spécialistes de la newsletter (qui je peux recommande sans réserve) avait un article intéressant sur ce, et comment gérer les
InterruptedException
. C'est bien la peine de lire et de digérer.Un solide et facile à manipuler dans la single threaded code de l'attraper et retrow dans une RuntimeException, afin d'éviter le besoin de le déclarer pour chaque méthode.
Méthodes comme
sleep()
etwait()
de classeThread
pourrait jeter unInterruptedException
. Ce sera le cas si certains autresthread
voulu interrompre lethread
qui est en attente ou à dormir.La
InterruptedException
est généralement jeté lorsque le sommeil est interrompu.