Sometimes you want to pause the execution of your Java code for a fixed number of milliseconds or seconds until another task is finished. There are multiple ways to achieve this.
The quickest way to stop the code execution in Java is to instruct the current thread to sleep for a certain amount of time. This is done by calling the Thread.sleep() static method:
try System.out.printf(«Start Time: %sn», LocalTime.now()); Thread.sleep(2 * 1000); // Wait for 2 seconds System.out.printf(«End Time: %sn», LocalTime.now()); > catch (InterruptedException e) e.printStackTrace(); >
The code above stops the execution of the current thread for 2 seconds (or 2,000 milliseconds) using the Thread.sleep() method. Also, notice the try. catch block to handle InterruptedException . It is used to catch the exception when another thread interrupts the sleeping thread. This exception handling is necessary for a multi-threaded environment where multiple threads are running in parallel to perform different tasks.
16. Оператор перехода Continue #java #shorts #программирование #урокипрограммирования
For better readability, you can also use the TimeUnit.SECONDS.sleep() method to pause a Java program for a specific number of seconds as shown below:
try System.out.printf(«Start Time: %sn», LocalTime.now()); TimeUnit.SECONDS.sleep(2); // Wait 2 seconds System.out.printf(«End Time: %sn», LocalTime.now()); > catch (InterruptedException e) e.printStackTrace(); >
Under the hood, the TimeUnit.SECONDS.sleep() method also calls the Thread.sleep() method. The only difference is readability that makes the code easier to understand for unclear durations. The TimeUnit is not just limited to seconds. It also provides methods for other time units such as nanoseconds, microseconds, milliseconds, minutes, hours, and days:
// Wait 500 nanoseconds TimeUnit.NANOSECONDS.sleep(500); // Wait 5000 microseconds TimeUnit.MICROSECONDS.sleep(5000); // Wait 500 milliseconds TimeUnit.MILLISECONDS.sleep(500); // Wait 5 minutes TimeUnit.MINUTES.sleep(5); // Wait 2 hours TimeUnit.HOURS.sleep(2); // Wait 1 day TimeUnit.DAYS.sleep(1);
The sleep times are inaccurate with Thread.sleep() when you use smaller time increments like nanoseconds, microseconds, or milliseconds.
This is especially true when used inside a loop. For every iteration of the loop, the sleep time will drift slightly due to other code execution and become completely imprecise after some iterations. For more robust and precise code execution delays, you should use the ScheduledExecutorService interface instead. This interface can schedule commands to run after a given delay or at a fixed time interval. For example, to run the timer() method after a fixed delay, you use the schedule() method:
public class Runner public static void main(String[] args) ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); // Execute timer after 2 seconds service.schedule(Runner::timer, 2, TimeUnit.SECONDS); > public static void timer() System.out.println(«Current time: » + LocalTime.now()); > >
Similarly, to call the method timer() every second, you should use the scheduleAtFixedRate() method as shown below:
Java. Многопоточность. Остановка потока. Обработка InterruptedException.
public class Runner public static void main(String[] args) ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); // Execute timer every second service.scheduleAtFixedRate(Runner::timer, 0, 1, TimeUnit.SECONDS); > public static void timer() System.out.println(«Current time: » + LocalTime.now()); > >
Here is a an example output of the above code:
Current time: 08:48:11.350034 Current time: 08:48:12.335319 Current time: 08:48:13.337250 Current time: 08:48:14.334107 Current time: 08:48:15.338532 Current time: 08:48:16.336175
✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.
You might also like.
- Calculate days between two OffsetDateTime objects in Java
- Calculate days between two ZonedDateTime objects in Java
- Calculate days between two LocalDateTime objects in Java
- Calculate days between two LocalDate objects in Java
- How to check if an enum value exists in Java
- How to iterate over enum values in Java
Источник: attacomsian.com
Как отложить выполнение кода в Java
Программы на Java довольно часто добавляют задержку или паузу в своей работе. Это может быть полезно для стимуляции задачи или для приостановки выполнения до завершения другой задачи.
В этом руководстве будут описаны два способа реализации задержек в Java.
2. Подход на основе потоков
Когда программа Java запускается, она порождает процесс , который выполняется на хост-компьютере. Этот процесс содержит как минимум один поток — основной поток , в котором выполняется программа. Кроме того, Java поддерживает многопоточность , что позволяет приложениям создавать новые потоки, работающие параллельно или асинхронно с основным потоком.
2.1. Использование Thread.sleep
Быстрый и грязный способ сделать паузу в Java — это указать текущему потоку спать в течение определенного периода времени. Это можно сделать с помощью Thread.sleep(миллисекунды) :
try Thread.sleep(secondsToSleep * 1000); > catch (InterruptedException ie) Thread.
currentThread().interrupt(); >
Хорошей практикой является заключение метода sleep в блок try/catch на случай, если другой поток прервет спящий поток. В этом случае мы перехватываем InterruptedException и явно прерываем текущий поток, чтобы его можно было перехватить и обработать позже. Это более важно в многопоточной программе, но все же является хорошей практикой в однопоточной программе на случай, если позже мы добавим другие потоки.
2.2. Использование TimeUnit.sleep
Для лучшей читаемости мы можем использовать TimeUnit.XXX.sleep(y) , где XXX — это единица времени, в течение которой нужно спать ( SECONDS , MINUTES и т. д .), а y — количество единиц, в течение которых нужно спать. Это использует Thread.sleep за кулисами. Вот пример синтаксиса TimeUnit :
try TimeUnit.SECONDS.sleep(secondsToSleep); > catch (InterruptedException ie) Thread.currentThread().interrupt(); >
Однако использование этих методов на основе потоков имеет некоторые недостатки :
- Время сна не совсем точное, особенно при использовании меньших приращений времени, таких как миллисекунды и наносекунды.
- При использовании внутри циклов сон будет немного дрейфовать между итерациями цикла из-за выполнения другого кода, поэтому время выполнения может стать неточным после многих итераций.
3. Подход на основе ExecutorService
Java предоставляет интерфейс ScheduledExecutorService , который является более надежным и точным решением. Этот интерфейс может запланировать выполнение кода один раз после указанной задержки или через фиксированные интервалы времени.
Чтобы запустить фрагмент кода один раз после задержки, мы можем использовать метод расписания :
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.schedule(Classname::someTask, delayInSeconds, TimeUnit.SECONDS);
В части Classname::someTask мы указываем метод, который будет выполняться после задержки:
- someTask — это имя метода, который мы хотим выполнить.
- Classname — это имя класса, содержащего метод someTask.
Чтобы запускать задачу через фиксированные промежутки времени, мы можем использовать метод scheduleAtFixedRate :
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleAtFixedRate(Classname::someTask, 0, delayInSeconds, TimeUnit.SECONDS);
Это приведет к многократному вызову метода someTask с паузой delayInSeconds между каждым вызовом.
Помимо предоставления дополнительных параметров времени, метод ScheduledExecutorService дает более точные временные интервалы, поскольку он предотвращает проблемы с дрейфом.
4. Вывод
В этой статье мы обсудили два метода создания задержек в программах на Java.
Полный код этой статьи можно найти на Github . Это проект на основе Maven, поэтому его легко импортировать и запускать как есть.
- 1. Введение
- 2. Подход на основе потоков
- 2.1. Использование Thread.sleep
- 2.2. Использование TimeUnit.sleep
Источник: for-each.dev
как приостановить выполнение программы в Java [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 5 лет назад .
как приостановить выполнение программы в Java
Отслеживать
задан 23 фев 2018 в 14:12
Andrei_Ert Andrei_Ert
47 1 1 серебряный знак 7 7 бронзовых знаков
Смотря какую программу. Смотря как надо приостановить. Конкретизируйте вопрос.
23 фев 2018 в 14:24
Thread.sleep(время остановки)
23 фев 2018 в 14:28
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Приостановить программу можно разными способами.
for(int i = 0; i < 1000000000; i++)< //need some sleep. >
А плох он тем, что от машины к машине (на который выполняется программа) время остановки будет разным. К тому же, что более важно, на мой взгляд — в пустую потраченный ресурс процессора (он то делает вычисления. ).
Thread.sleep(1000); //время остановки в миллисекундах
Уже намного лучше — тут Вы и контролируете время остановки, независимо от выполняющей код машины и не заставляете процессор работать в пустую.
Thread — класс для работы с потоками, в двух словах — любая программа написанная на Java имеет как минимум один поток, поэтому выполнение Thread.sleep() сработает везде!
Источник: ru.stackoverflow.com