¿Cómo hago un retraso en Java?

Resuelto ardb asked hace 10 años • 8 respuestas

Estoy intentando hacer algo en Java y necesito algo que esperar/retrasar durante unos segundos en un bucle 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++;
}

Quiero construir un secuenciador de pasos.

¿Cómo hago un retraso en Java?

ardb avatar Jun 08 '14 15:06 ardb
Aceptado

Si desea hacer una pausa, utilice java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

Dormir por un segundo o

TimeUnit.MINUTES.sleep(1);

Dormir un minuto.

Como se trata de un bucle, presenta un problema inherente: la deriva. Cada vez que ejecuta código y luego duerme, se alejará un poco de la ejecución, digamos, cada segundo. Si esto es un problema, no lo use sleep.

Además, sleepno es muy flexible a la hora de controlar.

Para ejecutar una tarea cada segundo o con un retraso de un segundo, recomendaría encarecidamente ay ScheduledExecutorServiceo scheduleAtFixedRateo scheduleWithFixedDelay.

Por ejemplo, para ejecutar el método myTaskcada segundo (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");
}

Y en 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");
}
Boris the Spider avatar Jun 08 '2014 08:06 Boris the Spider

Usar Thread.sleep(1000);

1000es el número de milisegundos que el programa se detendrá.

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
}
Anju Aravind avatar Jun 08 '2014 08:06 Anju Aravind

Utilizar esta:

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

y luego puedes llamar a este método en cualquier lugar como:

wait(1000);
Hecanet avatar Aug 20 '2019 05:08 Hecanet