我在这里发现了类似的问题,但没有满意的答案。所以再改一下这个问题-
我有一项需要定期执行的任务(例如间隔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 AM。如果由于某种原因将系统时间回滚到10:00 AM,则Timer将停止执行任务,直到达到11:00 AM,而Thread.sleep()方法将继续执行该任务而没有任何阻碍。这可能是决定这两者之间使用什么的主要决策者。