java - 在 Java 的循环中使用 Thread.sleep() 定期做某事是否可以?

标签 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();
}

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

最佳答案

长时间 sleep 不会影响性能。如果您 hibernate 5 毫秒,检查一些条件,然后重新 hibernate 5 毫秒等 3 分钟,这将产生一些性能成本。

如果您需要每 3 分钟执行一次操作,那么改用调度程序会更有意义。

你可以看看javadoc of ScheduledExecutorService举一个非常相似的例子。

关于java - 在 Java 的循环中使用 Thread.sleep() 定期做某事是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14561324/

相关文章:

c++ - netbeans ide 7.1.1 是否支持 c++11

java - ProcessBuilder 进程未运行

java - 澄清将并行性应用于计算目标单词出现次数的程序意味着什么

javascript - 如何使该复选框适用于新创建的任务?

matlab - 矩阵 "Zigzag"重新排序

java - Jenkins发送邮件中的身份验证错误

java - RxJava : "java.lang.IllegalStateException: Only one subscriber allowed!"

java - java中可变参数的最大参数数量是多少?

javascript - 如何使索引在map()循环中以倒计时方式进行?

java - 应用程序服务器(如 jboss 或 weblogic)能否每 'n' 次调用一些方法