Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать паузу в программе

Короткий ответ

Thread.sleep() приостанавливает текущий поток на заданное число миллисекунд:

void main() throws InterruptedException {
    IO.println("Starting...");
    Thread.sleep(500);
    IO.println("Done after half a second");
}

Результат:

Starting...
Done after half a second

sleep() может выбросить проверяемое InterruptedException, поэтому у main есть throws.

Через Duration

С Java 19 sleep() принимает Duration — так единицы времени видны сразу:

void main() throws InterruptedException {
    for (int i = 3; i > 0; i--) {
        IO.println(i);
        Thread.sleep(Duration.ofMillis(300));
    }
    IO.println("Go!");
}

Результат:

3
2
1
Go!

Повторять по расписанию

ScheduledExecutorService выполняет задачу с заданным интервалом, не блокируя основной поток:

void main() throws InterruptedException {
    var counter = new AtomicInteger();
    try (var scheduler = Executors.newSingleThreadScheduledExecutor()) {
        scheduler.scheduleAtFixedRate(
                () -> IO.println("tick " + counter.incrementAndGet()), 0, 200, TimeUnit.MILLISECONDS);
        Thread.sleep(500);
        scheduler.shutdownNow();
    }
}

Результат:

tick 1
tick 2
tick 3

Задача запускается сразу, затем каждые 200 мс; через полсекунды планировщик останавливается. Обычно успевает три запуска, но точное число зависит от загрузки компьютера.

Частая ошибка

«Проглатывать» InterruptedException пустым catch. Прерывание — сигнал потоку остановиться, и его нельзя терять. Если вы не можете пробросить исключение дальше, восстановите флаг:

void main() {
    Thread.currentThread().interrupt();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        IO.println("interrupted, stopping");
    }
}

Результат:

interrupted, stopping

Функции из этого ответа

  • Thread.sleep() — Приостанавливает текущий поток на заданное время.
  • ExecutorService — Сервис, который выполняет задачи в пуле потоков.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.