多线程可以使用线程。在Java中,在循环中使用sleep(),以便定期执行某些操作?
我读过一些帖子,上面说调用线程。循环中的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();
}
有更好的方法吗?这种情况有问题吗
# 1 楼答案
如果要设置延迟,最好使用ScheduledExecutorService。此接口支持将来和/或定期执行任务
请查看API文件中的样本代码和详细信息: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html
# 2 楼答案
如果你睡很长时间,它不会影响性能。如果你睡5分钟,检查一些情况,再睡5毫秒等3分钟,这将有一些性能成本
如果您需要的是每3分钟做一次,那么使用调度程序会更有意义
您可以查看javadoc of ScheduledExecutorService以获得一个非常类似的示例