2010-12-14 59 views
1

Dans mon code Callable, j'utilise la signalisation pour notifier plusieurs comportements de fin à un autre thread. Les objets Callable sont mis en file d'attente avec FutureTasks dans un Executor. Ils peuvent également être annulés après avoir été mis en file d'attente. Maintenant, mon problème est que je compte sur les tâches au moins commencées pour que ma signalisation fonctionne, mais il semble que l'Executor saute une tâche si elle a été marquée comme annulée avant de pouvoir l'exécuter. Donc, existe-t-il un moyen de garantir qu'une tâche est toujours démarrée et toujours annulée (par InterruptedException) en cours d'exécution?Requis Démarrage anticipé de FutureTask

De même, pouvez-vous vérifier si une tâche n'a pas démarré mais a échoué?

+0

Je soupçonne que la réponse est un simple "non" – skaffman

Répondre

2

Vous pouvez probablement sous-classer la classe FutureTask et remplacer sa méthode done() pour effectuer la signalisation. Selon la documentation, cette méthode doit être appelée même si la tâche a été annulée.

+0

Cette solution a bien fonctionné! J'ai ajouté une variable hasStarted pour suivre si Callable.run() a été appelée, et ajouté une signalisation dans le FutureTask.done() qui est déclenchée si hasStarted était faux. – hishadow