除schedule
方法的构造函数中的延迟选项外,这两种方法的主要区别是什么,这两种方法的优点是性能最佳或线程安全性执行??
Timer temporizer = new Timer();
TimerTask task = new TimerTask(){
@Override
public void run() {
// iterate something
}
};
temporizer.schedule (task,delay,interval);
或简单的
while (true){
// iterate something
try {
Thread.sleep(interval);
} catch (InterruptedException ex) {...}
}
提前致谢:)
答案 0 :(得分:2)
Timer
方法与基于睡眠的实现的主要好处是您可以取消它。通过在睡眠版本中执行while(true)
,您实际上无法彻底取消它。
我也会争辩,这是主观的,Timer
方法更清楚地表达了你想要做的事情。尽管如此,这些都是完全可以理解的,任何看过这段代码的人都可能“得到它”。
Timer
方法的另一个好处是,您可以将迭代逻辑封装在TimerTask
中,并将其与实际时间和调度分开。这样可以更容易测试。更重要的是,如果你把它放在自己的类中,而不是像你那样定义它。
答案 1 :(得分:1)
定时器取决于系统时间,因此系统时间的任何变化都会影响定时器的触发。
Thread.sleep不会对系统时间的变化产生任何影响。
此外,如果不立即收集垃圾,Timer会创建一个会影响内存的任务队列。更多的计时器将在堆上添加更多对象。 Thread.sleep()只会暂停线程,因此内存影响很小。