【发布时间】:2011-07-30 21:52:38
【问题描述】:
我正在开发一个 Java 程序,并使用 Timer 对象每隔几分钟或几小时运行一次任务。这在正常操作中工作正常,但我在 Mac 上遇到了“睡眠模式”的问题(可能在其他操作系统上,但我还没有尝试过)。
考虑这个代码示例:
//Setup the timer to fire the ping worker (every 3 minutes)
_PingTimer.scheduleAtFixedRate(new TimerTask(){
public void run(){
Program.PingThread = new PingWorker(Settings.Username, Settings.UserHash, true, true);
Program.PingThread.CheckOpenPort = true;
Program.SwingExecutor.execute(Program.PingThread);
}
}, 0, 180000);
在正常操作中,这会以足够的精度每 3 分钟触发一次(我不关心确切的秒数或其他任何东西)。这个问题是在计算机休眠几个小时左右之后,它似乎只是用积压的计时器请求来破坏系统。
它似乎在一次运行睡眠期间所有错过的计时器,试图弥补失去的时间。
有什么办法可以防止这种情况发生吗?我尝试使用synchronized 和其他一些线程技术,但这只能确保它们不会同时运行。他们仍然继续一个接一个地运行,直到积压过去。
感谢您提供的任何帮助!
【问题讨论】:
-
帮不上忙 - 只是用 mac,还是一般睡觉?
标签: java multithreading timer scheduled-tasks sleep