【发布时间】:2015-04-23 08:22:16
【问题描述】:
我正在使用 java.mail jar 文件版本 1.4.7
我创建了一个 Window 的调度程序来从电子邮件服务器加载电子邮件。此调度程序每 7 分钟运行一次。在代码的最后,对于那些已加载的电子邮件,系统将从电子邮件服务器中删除它们。
这应该可以工作,但如果前一个实例加载电子邮件的时间超过 7 分钟,另一个新实例可能会加载相同的电子邮件,因为第一个实例尚未运行删除电子邮件的代码。
我认为这是一个并发问题。
我尝试了一些解决方案:
- 将
synchronized关键字添加到方法中。 - 添加一个名为
isrun的复选框。在任何实例运行该方法之前,它需要验证是否isrun == false。如果为false,则系统将运行该方法;如果为真,那么它将绕过所有代码。实例运行完方法后,会再次将isrun复选框更新为false。 - 增加窗口调度器的时间长度。每 15 分钟而不是 7 分钟运行一次此方法。
- 将方法从非静态更改为静态。
这些方法确实有帮助,但如果电子邮件太大,它们就无法使用。 (可能他们有很多附件。)
你知道如何解决这个问题吗?
【问题讨论】:
-
感谢您重新编辑我的问题。
标签: java mysql concurrency jakarta-mail scheduler