Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpThSl 164 of 322 menu
◀ ▶

Пауза в потоке в Java

Иногда потоку нужно временно уступить процессор: имитация задержки сети, периодический опрос или простая демонстрация параллелизма. Статический метод Thread.sleep блокирует только текущий поток на указанное число миллисекунд.

Во время сна поток не потребляет CPU, но остаётся живым. Пробуждение не гарантирует мгновенный возврат к работе: планировщик может включить поток чуть позже заданного интервала.

Пауза на 200 миллисекунд внутри задачи:

public class Main { public static void main(String[] args) throws InterruptedException { Thread worker = new Thread(() -> { try { Thread.sleep(200); System.out.println("awake"); } catch (InterruptedException e) { System.out.println("interrupted during sleep"); Thread.currentThread().interrupt(); } }); worker.start(); worker.join(); } }

sleep бросает InterruptedException, если другой поток прервал спящий. После перехвата принято снова выставить флаг через Thread.currentThread().interrupt(), чтобы вызывающий код видел прерывание.

Тот же смысл через TimeUnit для читаемости:

import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { TimeUnit.MILLISECONDS.sleep(50); System.out.println("tick"); } }

Здесь спит главный поток. В worker ту же запись можно подставить вместо Thread.sleep.

Запустите поток, который спит 100 мс и печатает "late". В main сразу после start выведите "early" и дождитесь worker. Проверьте, что early всегда идёт перед late.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить