我有一個方法producer.postMessage(消息),這將消息發送到一些隊列。如果由於某種原因,郵件無法在一段時間內發送,我希望此任務被取消。我想到了下面的實現。我的問題是,如果有中斷,我可以確定Future task/executor服務全部關閉,如果不需要做出什麼改變,使得這個工作沒有任何線程沒有被終止。如何確保線程清理
非常感謝
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");
}
}
爲什麼不使用'shutdownNow'代替'shutdown'方法? 'isTerminated'方法也可用於檢查所有任務的成功終止。 –