[英]Is it okay to use Thread.sleep() in a loop in Java, to do something at regular intervals?
我已经阅读了一些线程,说在循环中调用Thread.sleep()是有问题的,并且是一个严重的性能问题。 但在某些情况下,这似乎是最自然的事情。
例如,如果我希望我的应用程序每3分钟执行一次(假设它是自动保存 )
public void startAutosaveLoop(){
stop = false;
new Thread(new Runnable() {
@Override
public void run() {
while (!stop){
Thread.sleep(T*1000);
if (!stop){
// do something
}
}
}
}).start();
}
有没有更好的方法来做到这一点? 这种情况有问题吗?
如果你长时间睡觉,它不会影响性能。 如果你睡了5ms,检查一些情况,回到睡眠5毫秒等3分钟,它将有一些性能成本。
如果您需要的是每3分钟做一次,那么使用调度程序会更有意义。
您可以查看ScheduledExecutorService的javadoc以获取非常相似的示例。
如果要延迟,最好使用ScheduledExecutorService 。 此接口支持将来和/或定期执行任务。
请检查API文档以获取示例代码和详细信息: http : //docs.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.