Ich habe eine Methode producer.postMessage (Nachricht), die eine Nachricht an eine Warteschlange sendet. Wenn die Nachricht aus irgendeinem Grund nicht innerhalb eines bestimmten Zeitraums gesendet werden konnte, muss diese Aufgabe abgebrochen werden. Ich habe die folgende Implementierung entwickelt. Meine Frage ist, ob es einen Interrupt gibt, kann ich sicher sein, dass der Future-Task/Executor-Dienst alle heruntergefahren wird und wenn nicht, welche Änderungen vorgenommen werden müssen, damit dies funktioniert, ohne dass irgendwelche Threads beendet werden.Wie sicher sein, Threads sind bereinigt
Vielen Dank
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");
}
}
warum nicht verwenden 'shutdownNow' statt' shutdown' Methode? Auch die 'isTerminated'-Methode kann verwendet werden, um die erfolgreiche Beendigung aller Aufgaben zu überprüfen. –