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() 只会暂停线程,因此对内存的影响很小。