我有一个java.util.Timer
用于限制电子邮件发送的工具(如果最近发送了一封状态电子邮件,那么现在不要发送,而是创建一个计时器任务,以便稍后以任何新状态发送它)。
我想要的是确保最终发送任何排队的电子邮件,但如果没有排队,那么程序可以正常关闭。不幸的是,我无法决定如何去做:
如果我将 Timer 保留在默认(非守护程序)模式,那么它将阻止进程退出,直到它被明确取消。
如果我将 Timer 设置为守护程序模式,那么它将允许关闭,但任何排队的任务(即未发送的电子邮件)都将被放弃。
到目前为止,我所做的是在发送电子邮件后显式取消计时器(并让它被垃圾收集),然后在需要时为未来延迟的电子邮件重新创建一个新的计时器。这似乎是不必要的流失。
有没有办法控制 Timer 的守护进程状态?或者替代计时器来实现这种延迟电子邮件方案?
编辑请注意,我当前的解决方案,无论多么令人讨厌,都具有电子邮件发送是“一劳永逸”的优势。一旦对电子邮件发件人进行了调用,计时器的非守护程序状态确保电子邮件将被发送,即使应用程序的某些其他部分同时导致关闭。这避免了需要特殊的应用程序关闭代码来控制定时器。