gpt4 book ai didi

当且仅当任务排队时防止关闭的 Java 计时器

转载 作者:行者123 更新时间:2023-11-30 11:28:56 27 4
gpt4 key购买 nike

我有一个 java.util.Timer 用于限制电子邮件发送(如果最近发送了状态电子邮件,那么现在不要发送,而是创建一个计时器任务以稍后发送任何新状态)。

我想要的是确保最终发送所有排队的电子邮件,但如果没有排队,则程序可以正常关闭。不幸的是,我无法决定如何去做:

  • 如果我让 Timer 处于默认(非守护进程)模式,那么它会阻止进程退出,直到它被明确取消。

  • 如果我将定时器设置为守护进程模式,那么它将允许关闭,但任何排队的任务(即未发送的电子邮件)都将被放弃。

到目前为止,我所做的是在电子邮件发送后显式取消 Timer(并让它被垃圾收集),然后在需要时重新创建一个新的 Timer 以用于将来延迟的电子邮件。这似乎是不必要的流失。

有没有办法控制定时器的守护进程状态?或者可以实现这种延迟电子邮件方案的定时器替代方案?

编辑 请注意,我当前的解决方案虽然令人讨厌,但其优点是电子邮件发送“即发即弃”。一旦调用了电子邮件发件人,定时器的非守护进程状态确保电子邮件将被发送,即使应用程序的其他部分同时导致关闭。这避免了需要特殊的应用程序关闭代码来控制定时器。

最佳答案

如果@tieTYT 建议的线程池执行器不能满足您的需求,为什么不在应用程序退出时使用非守护程序计时器关闭计时器?假设您要干净地关闭,您的代码应该提供一种方法来执行一些清理步骤。或者,作为最后的努力,您可以添加一个关闭 Hook 来取消计时器。

关于当且仅当任务排队时防止关闭的 Java 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com