J'ai un programme Java qui s'exécute sur une planification et récupère certaines données de sources externes via des appels RFC. Les appels RFC sont threadés et doivent être annulés après 60 secondes. Voici comment je le fais:Java - annuler correctement l'exécution du thread après TimeoutException
Future<String> future = executor.submit(new MyCallable());
try {
future.get(60, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.cancel(true);
}
Cela a fonctionné pendant longtemps jusqu'à ce que je suis tombé sur une situation où l'appel RFC externe est resté coincé et future.cancel (vrai) n'a pas pu interrompre le fil d'exécution. Donc, mon programme Java n'a jamais fini et a continué à fonctionner jusqu'à ce que j'annule manuellement le processus correspondant dans le système externe.
Ma question est maintenant, comment peut-on garantir le code de finir dans n'importe quelle situation? J'ai vu que l'arrêt du fil est déprécié.
Serait-ce une bonne idée de faire comme ça?
try {
future.get(60, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.cancel(true);
if(!future.isDone()){
System.exit(1);
}
}
Merci pour vos idées.
Cheers, Jooo