java 这两种休眠执行方法的差异
Diferences in this two approaches to sleep the excecution in java
除了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) {...}
}
提前致谢:)
Timer
方法与基于睡眠的实施相比的主要好处是您可以取消它。 sleep版搞个while(true)
,还真没办法取消干净
我还认为,Timer
方法更清楚地表达了您想要做的事情,这是主观的。不过需要澄清的是,这些都是完全可以理解的,任何其他查看此代码的人可能 "get it".
Timer
方法的另一个好处是您可以将迭代逻辑封装在 TimerTask
中,并使其与实际的计时和调度分开。这将使它更容易测试。如果您将它放在自己的 class 中,而不是按照您在那里的方式定义它,则更是如此。
定时器依赖于系统时间,因此系统时间的任何变化都会影响定时器的触发。
Thread.sleep不会受到系统时间变化的影响。
另外,如果不立即进行垃圾回收,Timer 会创建一个会影响内存的任务队列。更多计时器将在堆上添加更多对象。 Thread.sleep() 只会暂停线程,因此对内存的影响很小。
除了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) {...}
}
提前致谢:)
Timer
方法与基于睡眠的实施相比的主要好处是您可以取消它。 sleep版搞个while(true)
,还真没办法取消干净
我还认为,Timer
方法更清楚地表达了您想要做的事情,这是主观的。不过需要澄清的是,这些都是完全可以理解的,任何其他查看此代码的人可能 "get it".
Timer
方法的另一个好处是您可以将迭代逻辑封装在 TimerTask
中,并使其与实际的计时和调度分开。这将使它更容易测试。如果您将它放在自己的 class 中,而不是按照您在那里的方式定义它,则更是如此。
定时器依赖于系统时间,因此系统时间的任何变化都会影响定时器的触发。
Thread.sleep不会受到系统时间变化的影响。
另外,如果不立即进行垃圾回收,Timer 会创建一个会影响内存的任务队列。更多计时器将在堆上添加更多对象。 Thread.sleep() 只会暂停线程,因此对内存的影响很小。