Je travaille sur une application multithread dans Java 5. Quand il s'exécute il commence plusieurs services d'exécuteur et il doit fonctionner pendant très longtemps. J'ai un service de surveillance qui vérifie l'état de chaque exécuteur créé. J'ai lu que le service d'exécuteur testamentaire ne peut avoir les états suivants:Surveillance et redémarrage du service d'exécution et de la tâche future?
- en cours d'exécution,
- arrêter et
- terminé.
Dans le cas où quelque chose d'étrange se produit lors de l'exécution, je sous-classé mon FutureTask classe et overriden les méthodes:
- setException et,
- fait (quelque chose d'inhabituel comme ExecutionException et InterruptedException sont ici)
J'ai un cas où un service Executor lève une ExecutionException (dans ma propre classe FutureTask). L'ExecutionException est interceptée et enregistrée, mais mon service d'exécution ne se connecte plus à rien. Mon service de surveillance sort le service d'exécution est toujours en vie. Peut-être que cela a à voir avec le fait que ma FutureTask a atteint l'état fait?
- Quelle est la meilleure façon de gérer cela?
- Est-il possible de redémarrer le service d'exécution?
- Il semble que l'état FutureTask affecte le service Executor, puis-je utiliser l'état de FutureTask pour connaître l'état du service Executor?
Merci pour votre aide,
Merci pour votre réponse et vos conseils Peter. Par Java 5, je voulais dire que j'utilisais la nouvelle architecture d'exécuteur. Ma version de Java et est 6.0. Vous avez parfaitement raison de garder le travail jvm à jour. J'ai également résolu mon problème, il semble fonctionner: j'ai ajouté une ligne dans le moniteur pour vérifier l'état fait du futuretask et si c'est vrai alors je soumet de nouveau le futuretask à l'exécuteur. – Alain
@Alain, il est assez simple de s'assurer qu'il ne meurt pas en premier lieu. ;) –