是否可以在Java循环中使用Thread.sleep()来定期执行某些操作?

Ale*_*ila 12 java multithreading loops intervals thread-sleep

我已经阅读了一些线程,说在循环中调用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();
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?这种情况有问题吗?

ass*_*ias 5

如果你长时间睡觉,它不会影响性能.如果你睡了5ms,检查一些情况,回到睡眠5毫秒等3分钟,它将有一些性能成本.

如果您需要的是每3分钟做一次,那么使用调度程序会更有意义.

您可以查看ScheduledExecutorServicejavadoc以获取非常相似的示例.