我发现这里有类似的问题,但是它们都没有满足我的需求。因此,我再次重新提出问题-
我有一个需要定期执行的任务(比如每1分钟执行一次)。相比于创建一个带有无限循环和sleep的新线程,使用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()方法将继续执行任务而不受干扰。这可能是决定在这两者之间使用什么的重要因素。