Disons que je fais quelque chose en Java comme:Traitement d'une arrivée à expiration FutureTask
RemoteResponse response = null;
try {
FutureTask task new FutureTask(....);
executor.execute(task);
response = task.get(1000, TimeUnits.MILLISECONDS);
}
catch(TimeoutException te) {
.. should I do something special here? ... .. what happens to the return value of the task if task.get() throws an exception? ... .. is it ever garbage collected? ..
}
Ma question est quelque chose ne tient sur RemoteResponse dans le cas où TimeoutException est jeté? Va-t-il récupérer les ordures? Dois-je appeler la méthode cancel() sur la tâche pour que cela se produise?
Cela ressemble à une bonne approche. – Dave
Si on appelle Future # cancel() sur une FutureTask et que cet appel annule effectivement l'opération - en supposant qu'elle n'ait pas été annulée ou qu'elle soit déjà terminée - la méthode protégée FutureTask # done() sera appelée. Dans done(), vous pouvez appeler Future # isCancelled() pour voir si vous avez terminé en vertu de l'annulation. En d'autres termes, done() ne sera appelé qu'une fois au maximum. Si vous n'appelez jamais run() ou cancel() sur FutureTask, done() ne sera jamais appelé. – seh