Как замедлить программу java

Метод thread sleep в Java – задержка по времени

Метод Thread.sleep() можно использовать для приостановки выполнения текущего потока на указанное время в миллисекундах. Значение аргумента в миллисекундах не может быть отрицательным, иначе оно выдает исключение IllegalArgumentException.

Существует еще один метод sleep(long millis, int nanos), который можно использовать для приостановки выполнения текущего потока на указанные миллисекунды и наносекунды. Допустимое значение nano second составляет от 0 до 999999.

InterruptedException возникает, если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается при возникновении этого исключения.

public static void sleep(long millis) throws InterruptedException

Как работает Thread Sleep?

Thread.sleep() взаимодействует с планировщиком потока, чтобы перевести текущий поток в состояние ожидания в течение указанного периода времени. По истечении времени, ожидания состояние потока изменяется на работоспособное состояние и ожидает ЦП для дальнейшего выполнения.

[Java] Ускоряем запуск java приложения в 100 раз | Оптимизация с помощью GraalVM Native для Quarkus

Таким образом, фактическое время ожидания текущего потока зависит от планировщика потока, который является частью операционной системы.

Пример thread sleep на Java

Вот простая программа на Java, в которой Thread.sleep() используется для задержки по времени основного потока на 2 секунды.

package com.journaldev.threads; public class ThreadSleep < public static void main(String[] args) throws InterruptedException < long start = System.currentTimeMillis(); Thread.sleep(2000); System.out.println(«Sleep time in ms EnlighterJSRAW» data-enlighter-language=»java» data-enlighter-theme=»eclipse»>package com.tutorial; import java.lang.*; public class ThreadDemo implements Runnable < Thread t; public void run() < for (int i = 10; i < 13; i++) < System.out.println(Thread.currentThread().getName() + » » + i); try < // в течение 1000 миллисекунд Thread.sleep(1000); >catch (Exception e) < System.out.println(e); >> > public static void main(String[] args) throws Exception < Thread t = new Thread(new ThreadDemo()); // this will call run() function t.start(); Thread t2 = new Thread(new ThreadDemo()); // this will call run() function t2.start(); >>

Читайте также:
Как работать в программе заполнение форм статистической отчетности

Давайте скомпилируем и запустим программу, это даст следующий результат:
Thread-0 10
Thread-1 10
Thread-0 11
Thread-1 11
Thread-0 12
Thread-1 12

Средняя оценка 4.1 / 5. Количество голосов: 10

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник: hr-vector.com

Java Records — общий взгляд на использование.

Как задержать выполнение кода на Java

Относительно часто программы Java добавляют задержку или паузу в свою работу. Это может быть полезно для ускорения выполнения задачи или для приостановки выполнения до завершения другой задачи.

В этом руководстве будут описаны два способа реализации задержек в Java.

2. Подход, Основанный На Потоках

Когда запускается программа Java, она порождает процесс , который выполняется на хост-машине. Этот процесс содержит по крайней мере один поток – основной поток – в котором выполняется программа. Кроме того, Java позволяет многопоточность , что позволяет приложениям создавать новые потоки, которые выполняются параллельно или асинхронно с основным потоком.

2.1. Использование Thread.sleep

Быстрый и грязный способ приостановки в Java-это указать текущему потоку, чтобы он спал в течение определенного периода времени. Это можно сделать с помощью Thread.sleep(миллисекунды) :

try < Thread.sleep(secondsToSleep * 1000); >catch (InterruptedException ie)

Рекомендуется обернуть метод sleep в блок try/catch на случай, если другой поток прерывает спящий поток. В этом случае мы перехватываем исключение InterruptedException и явно прерываем текущий поток, чтобы его можно было перехватить позже и обработать. Это более важно в многопоточной программе, но все же хорошая практика в однопоточной программе на случай, если мы добавим другие потоки позже.

Читайте также:
Сколько элементов массива после выполнения программы будут иметь ненулевые значения

2.2. Использование TimeUnit.sleep

Для лучшей читаемости мы можем использовать TimeUnit.XXX.sleep(y) , Где XXX – единица времени для сна ( СЕКУНДЫ , МИНУТЫ и т. Д.), А y – номер этой единицы для сна. Это использует Thread.sleep за кулисами. Вот пример синтаксиса Единицы времени :

try < TimeUnit.SECONDS.sleep(secondsToSleep); >catch (InterruptedException ie)

Однако есть некоторые недостатки в использовании этих методов на основе потоков :

  • Время сна не совсем точно, особенно при использовании меньших временных приращений, таких как миллисекунды и наносекунды
  • При использовании внутри циклов сон будет немного смещаться между итерациями цикла из-за выполнения другого кода, поэтому время выполнения может стать неточным после многих итераций

3. Подход, Основанный На ExecutorService

Java предоставляет интерфейс ScheduledExecutorService, который является более надежным и точным решением. Этот интерфейс может запланировать выполнение кода один раз после указанной задержки или через фиксированные интервалы времени.

Чтобы запустить фрагмент кода один раз после задержки, мы можем использовать метод schedule :

ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.schedule(Classname::someTask, delayInSeconds, TimeUnit.SECONDS);

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

  • некоторая задача – это имя метода, который мы хотим выполнить
  • Имя класса – это имя класса, содержащего ту же задачу метод

Для выполнения задачи с фиксированными интервалами времени мы можем использовать метод scheduleAtFixedRate :

ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleAtFixedRate(Classname::someTask, 0, delayInSeconds, TimeUnit.SECONDS);

Это приведет к многократному вызову метода некоторой задачи , делая паузу для задержки В секундах между каждым вызовом.

Кроме того, позволяя больше вариантов синхронизации, метод ScheduledExecutorService дает более точные временные интервалы, так как он предотвращает проблемы с дрейфом.

4. Заключение

В этой статье мы обсудили два метода создания задержек в программах Java.

Читайте также:
Аксесс это программа относящаяся к классу

Полный код этой статьи можно найти на Github . Это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.

Читайте ещё по теме:

  • Как убить поток Java
  • Введение в ThreadLocal на Java
  • Общие ошибки параллелизма в Java
  • Печать Четных и нечетных чисел С использованием 2 потоков
  • Что такое потокобезопасность и как ее достичь?
  • Пример Java ThreadLocal
  • System.exit() в Java
  • Метки code, execution, method, thread

Источник: javascopes.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru