我有一个方法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'方法也可用于检查所有任务的成功终止。 –