2011-07-12 1 views
5

J'utilise la classe Future de java pour exécuter une tâche, mais la méthode isDone renvoie true si la tâche est terminée. L'achèvement peut être dû à une résiliation normale, une exception ou une annulation - dans tous ces cas, cette méthode sera vraie.comment puis-je savoir comment une tâche s'est terminée lors de l'utilisation de la classe Future de java

Y at-il un moyen de savoir si elle s'est terminée parce qu'une exception ou parce qu'elle s'est terminée avec succès?

Répondre

2

Vous pouvez simplement essayer de récupérer la valeur - la méthode get lève une exception ou renvoie la valeur.

6

Lorsque vous appelez la méthode Future.get(), il y a 4 résultats possibles:

  • Vous obtenez la valeur du résultat
  • Vous obtenez CancellationException - si le calcul a été annulée (par exemple Future.cancel (true) est appelée)
  • Vous obtenez ExecutionException - si le calcul a lancé une exception
  • Vous obtenez InterruptedException - si le thread courant a été interrompu en attendant (par exemple executor.shutdownNow() est appelée)
+0

vous avez raison, cela est une approche beaucoup plus mieux. +1 –

+0

Comment savoir si Runnable ou Callable est en train d'être exécuté par un thread? Est-ce que Future fournit cette information? – Abidi

0

Je l'ai utilisé dans mon code et la seule façon de savoir si la tâche est vraiment terminé avec succès en utilisant get()

Questions connexes