J'ai une méthode producer.postMessage (message) qui envoie un message à une file d'attente. Si, pour une raison quelconque, le message n'a pas pu être envoyé dans un délai donné, je souhaite que cette tâche soit annulée. Je suis venu avec la mise en œuvre ci-dessous. Ma question est la suivante: s'il y a une interruption, puis-je m'assurer que le service Tâche/exécuteur Futur est éteint? Sinon, quels changements doivent être faits pour que cela fonctionne sans que les tâches soient terminées?Comment être sûr que les threads sont nettoyés
Merci beaucoup
public void postMessage(final Object object)
{
LOG.debug("postMessage object " + object.getClass().getSimpleName());
Message message = new Message("task", 10, object);
try
{
ExecutorService ex = Executors.newSingleThreadExecutor();
Future<?> f = ex.submit(new Runnable()
{
public void run()
{
producer.postMessage(message);
LOG.debug("Finished sending message for " + object.getClass().getSimpleName());
}
});
f.get(5, TimeUnit.SECONDS);
ex.shutdown();
}
catch (InterruptedException | ExecutionException | TimeoutException e)
{
LOG.error("Could not deliver message to the queue, Check AMQ is running");
}
}
pourquoi ne pas utiliser 'shutdownNow' au lieu de méthode' shutdown'? La méthode 'isTerminated' peut également être utilisée pour vérifier l'aboutissement de toutes les tâches. –