В Java, периодические запросы можно делать без использования Thread.sleep
с помощью класса ScheduledExecutorService
. Данный класс предоставляет удобные методы для планирования и выполнения задач с определенным интервалом.
Вот пример кода, демонстрирующий использование ScheduledExecutorService
для периодического выполнения задачи:
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { // Создаем экземпляр ScheduledExecutorService с помощью фабричного метода Executors.newScheduledThreadPool() ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); // Запускаем задачу через 0 секунд с периодом 1 секунда executorService.scheduleAtFixedRate(() -> { // выполнение периодической задачи System.out.println("Выполняется периодическая задача"); }, 0, 1, TimeUnit.SECONDS); // Ждем некоторое время, чтобы пример не завершался сразу try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // Остановка планировщика задач executorService.shutdown(); } }
В данном примере мы создаем ScheduledExecutorService
с помощью метода Executors.newScheduledThreadPool(1)
, который создает планировщик с одним рабочим потоком. Затем мы используем метод scheduleAtFixedRate
, чтобы запланировать задачу, которая будет выполняться сразу после запуска и повторяться с указанным интервалом - 1 секунда.
На выходе мы получим следующий вывод:
Выполняется периодическая задача Выполняется периодическая задача Выполняется периодическая задача Выполняется периодическая задача Выполняется периодическая задача
После запуска периодической задачи, мы ждем некоторое время (в данном случае 5 секунд) и останавливаем планировщик с помощью метода shutdown
.
Использование ScheduledExecutorService
поможет вам достичь периодического выполнения задач без использования Thread.sleep
. Он предоставляет удобные методы для более точного управления такими задачами и гарантирует их корректное выполнение.