Timer & TimerTask 与 Thread + Sleep 在 Java 中
2022-08-31 09:52:21
我在这里发现了类似的问题,但没有令我满意的答案。所以再改写一下这个问题——
我有一个任务需要定期完成(比如1分钟的间隔)。使用Timertask和Timer来做到这一点有什么好处,而不是创建一个具有睡眠无限循环的新线程?
使用计时器任务的代码片段-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
使用线程和睡眠的代码片段 -
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,计时器将停止执行任务,直到它达到上午11:00,而Thread.sleep()方法将继续执行任务而不会受到阻碍。这可能是决定在这两者之间使用什么的主要决策者。