最佳答案
我在这里发现了类似的问题,但是没有令我满意的答案
我有一项任务需要定期完成(比如说每隔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 ()方法将毫无阻碍地继续执行任务。这可能是决定在这两者之间使用什么的主要决策者。