我在这里发现了类似的问题,但没有令我满意的答案。所以再次改写这个问题——
我有一项需要定期完成的任务(比如 1 分钟间隔)。与创建具有无限循环睡眠的新线程相比,使用 Timertask 和 Timer 执行此操作有什么优势?
使用 timertask 的代码片段-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
使用 Thread 和 sleep- 的代码片段
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
如果逻辑的执行花费的时间超过间隔时间,我真的不必担心如果我错过了某些周期。
请对此发表评论。。
更新:
最近我发现使用 Timer 与 Thread.sleep() 之间的另一个区别。假设当前系统时间是上午 11:00。如果我们出于某种原因将系统时间回滚到上午 10:00,Timer 将停止执行任务,直到它到达上午 11:00,而 Thread.sleep() 方法将继续执行任务而不受阻碍。这可能是决定在这两者之间使用什么的主要决策者。