有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程可以使用线程。在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();
}

有更好的方法吗?这种情况有问题吗


共 (2) 个答案

  1. # 2 楼答案

    如果你睡很长时间,它不会影响性能。如果你睡5分钟,检查一些情况,再睡5毫秒等3分钟,这将有一些性能成本

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

    您可以查看javadoc of ScheduledExecutorService以获得一个非常类似的示例