Как сделать задержку в java
Задержать выполнение программы мы можем с помощью метода sleep из java.util.concurrent.TimeUnit или Thread :
import java.util.concurrent.TimeUnit; public class App public static void main(String[] args) throws InterruptedException TimeUnit.SECONDS.sleep(1); // задержка 1 секунда Thread.sleep(1000); // задержка 1000 миллисекунд > >
Как сделать задержку в ходе выполнения цикла?
Необходимо сделать цикл, в котором происходит выполнения действия -> задержка (допустим секунда) -> опять действие. Мои попытки приводят к тому, что действие выполняется, только все задержки «суммируются» и используются одновременно, что приводит к тому, что результат выводиться только к концу цикла.
public void Add(View v) < Run(); >public void Run() < while(a!=5)< a++; String b = String.valueOf(a); myList.add(b); name=myList.toArray(new String[myList.size()]); RV.setAdapter(new Adapter(name)); try < Thread.sleep(100); >catch (InterruptedException e) <> > >
Прошу помочь если не кодом, то советом/ссылкой на нечто подобное.
Отслеживать
1,150 7 7 серебряных знаков 14 14 бронзовых знаков
задан 18 мар 2018 в 17:33
57 1 1 золотой знак 1 1 серебряный знак 6 6 бронзовых знаков
А где у вас там выводится резултат?
19 мар 2018 в 10:32
Возможно кто-то еще меняет переменную a (так как она, судя по всему глобальная).
19 мар 2018 в 14:15
опишите детально проблему
7 янв 2019 в 19:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В чем проблема? Ваш вариант вполне подходит. Можно немного красивее:
for(int i = 0; i < 3; i++) < // Ваш код try < Thread.sleep(1000) >catch(InterruptedException ex) <> >
Все происходит как Вы и хотите: выполняется Ваш код -> задержка (1 сек) -> опять выполняется Ваш код . И так 3 раза.
Функция задержки delay
Поскольку в системной динамике для циклов с обратными связями характерным является наличие временных задержек: сначала задержка между решением и следствием от него, а затем, задержка между следствием и тем моментом времени, когда информация об этом следствии повлияет на новое решение, то AnyLogic предлагает специальную функцию для задания таких задержек — delay .
Например, в классической модели диффузии по Бассу с помощью функции задержки моделируется поток отказа от приобретенного ранее товара вследствие истечения срока его службы. В этой модели люди перемещаются из накопителя клиентов обратно в накопитель потенциальных клиентов с интенсивностью, равной по сути интенсивности приобретения продукта, задержанной на время срока службы этого продукта.
Функция delay может вызываться в формулах, вычисляющих значения потоков. Пожалуйста, не обращайте внимание на то, что эта функция не присутствует в списке функций мастера подстановки кода — просто вводите имя этой функции там, где вам это нужно.
У функции delay есть два различных синтаксиса:
Функция задерживает заданный поток на указанное время.
Здесь поток — либо имя переменной типа поток, либо выражение любой сложности, возвращающее численное значение.
Время задержки — либо константа, либо численное выражение (например, вызов функции, возвращающей численное значение, или численный параметр). Если значение времени задержки будет отрицательным или равно нулю, то функция задержки просто вернет текущее значение заданного потока .
До того момента, пока не пройдет заданное время задержки , функция задержки будет возвращать начальное значение .
Упрощенный вызов функции. Используется в тех случаях, когда начальное значение равно нулю.
Так, в описанном выше примере формула для потока ИнтенсивностьОтказаОтПродукта будет выглядеть так:
delay(ИнтенсивностьПродаж, СрокЖизниПродукта)
Приведенный ниже график иллюстрирует работу функции задержки:
Метод 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() взаимодействует с планировщиком потока, чтобы перевести текущий поток в состояние ожидания в течение указанного периода времени. По истечении времени, ожидания состояние потока изменяется на работоспособное состояние и ожидает ЦП для дальнейшего выполнения.
Таким образом, фактическое время ожидания текущего потока зависит от планировщика потока, который является частью операционной системы.
Пример 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
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
