Подтвердить что ты не робот

Можно ли использовать Thread.sleep() в цикле в Java, чтобы что-то делать с регулярными интервалами?

Я прочитал несколько потоков, в которых говорилось, что вызов 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();
}

Есть ли лучший способ сделать это? Является ли такая ситуация проблематичной?

4b9b3361

Ответ 1

Если вы спите в течение длительного времени, это не повлияет на производительность. Если вы спите в течение 5 мс, проверьте состояние, вернитесь в режим ожидания на 5 мс и т.д. В течение 3 минут он будет иметь некоторую производительность.

Если вам нужно что-то делать каждые 3 минуты, было бы разумнее использовать планировщик.

Вы можете взглянуть на javadoc ScheduledExecutorService для очень похожего примера.