Вопрос-ответ

How do I make a delay in Java?

Как мне сделать задержку в Java?

Я пытаюсь что-то сделать в Java, и мне нужно что-то для ожидания / задержки на некоторое количество секунд в цикле while.

while (true) {
if (i == 3) {
i = 0;
}

ceva[i].setSelected(true);

// I need to wait here

ceva[i].setSelected(false);

// I need to wait here

i++;
}

Я хочу создать пошаговый секвенсор.

Как мне сделать задержку в Java?

Переведено автоматически
Ответ 1

Если вы хотите сделать паузу, используйте java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

Перейти в режим ожидания на одну секунду или

TimeUnit.MINUTES.sleep(1);

Перейти в спящий режим на минуту.

Поскольку это цикл, это создает неотъемлемую проблему - дрейф. Каждый раз, когда вы запускаете код, а затем переходите в режим сна, вы будете немного отклоняться от выполнения, скажем, каждую секунду. Если это проблема, то не используйте sleep.

Кроме того, sleep не очень гибко, когда дело доходит до управления.

Для запуска задачи каждую секунду или с задержкой в одну секунду я бы настоятельно рекомендовал ScheduledExecutorService и либо scheduleAtFixedRate или scheduleWithFixedDelay.

Например, запускать метод myTask каждую секунду (Java 8):

public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
System.out.println("Running");
}

И в Java 7:

public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
System.out.println("Running");
}
Ответ 2

Использовать Thread.sleep(1000);

1000 это количество миллисекунд, в течение которых программа будет приостанавливаться.

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
Ответ 3

Используйте это:

public static void wait(int ms)
{
try
{
Thread.sleep(ms);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}

и, тогда вы можете вызвать этот метод в любом месте, например:

wait(1000);
Ответ 4

Вам нужно использовать Thread.sleep() вызов.

Подробнее здесь: https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

java