Quand Thread.sleep de Java lance-t-il InterruptedException? Est-il prudent de l'ignorer? Je ne fais pas de multithreading. Je veux juste attendre quelques secondes avant de réessayer une opération.
110
Quand Thread.sleep de Java lance-t-il InterruptedException? Est-il prudent de l'ignorer? Je ne fais pas de multithreading. Je veux juste attendre quelques secondes avant de réessayer une opération.
InterruptedException
est une exception interceptée, de sorte que vous ne pouvez pas compiler à moins que vous gérez ou déclarer ce type d'exception sur une méthode qui rejoint ou dortThread
, ou des appelswait()
surObject
.Réponses:
Vous ne devez généralement PAS ignorer l'exception. Jetez un œil à l'article suivant:
Voir l'article entier ici:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
la source
Si un
InterruptedException
est jeté, cela signifie que quelque chose veut interrompre (généralement terminer) ce thread. Cela est déclenché par un appel à lainterrupt()
méthode threads . La méthode wait détecte cela et lève unInterruptedException
afin que le code catch puisse traiter la demande d'arrêt immédiatement et n'ait pas à attendre que le temps spécifié soit écoulé.Si vous l'utilisez dans une application à un seul thread (et également dans certaines applications à plusieurs threads), cette exception ne sera jamais déclenchée. Je ne recommanderais pas de l'ignorer en ayant une clause catch vide. Le lancement du
InterruptedException
efface l'état interrompu du thread, donc s'il n'est pas géré correctement, cette information est perdue. Par conséquent, je proposerais d'exécuter:Ce qui rétablit cet état. Après cela, terminez l'exécution. Ce serait un comportement correct, même difficile jamais utilisé.
Ce qui pourrait être mieux est d'ajouter ceci:
... instruction au bloc catch. Cela signifie essentiellement que cela ne doit jamais arriver. Donc, si le code est réutilisé dans un environnement où cela pourrait arriver, il s'en plaindra.
la source
RuntimeException
.La newsletter Java Specialists (que je peux recommander sans réserve) contenait un article intéressant à ce sujet , et comment gérer le
InterruptedException
. Cela vaut la peine d'être lu et digéré.la source
Des méthodes comme
sleep()
etwait()
de classeThread
peuvent lancer unInterruptedException
. Cela se produira si un autrethread
souhaite interrompre celuithread
qui attend ou qui dort.la source
Un moyen solide et simple de le gérer dans un code à thread unique serait de l'attraper et de le retrow dans une RuntimeException, pour éviter d'avoir à le déclarer pour chaque méthode.
la source
Le
InterruptedException
est généralement jeté lorsqu'un sommeil est interrompu.la source