1.Thread.sleep()

Puede insertar pausas en la ejecución de un programa Java. Esto no suele ser necesario, ya que los usuarios quieren que sus programas se ejecuten lo más rápido posible. No muchas personas estarían felices si deliberadamente ralentizaras tu código.

Pero como programador, puede haber muchas situaciones en las que una pausa en su código sea útil. Por ejemplo, suponga que está escribiendo un juego y quiere que haga algo una vez cada dos segundos o varias veces por segundo.

Básicamente, las pausas son útiles, así que veamos cómo agregar una pausa a su código. En realidad es muy simple:

Thread.sleep(duration);

Donde duration es la duración de la pausa en milisegundos ( 1/1000de un segundo).

Esta declaración pausará su programa por duration milisegundos. Ejemplos:

Thread.sleep(2000);
Pausa el programa durante 2 segundos.
Thread.sleep(500);
Pausa el programa durante medio segundo.
Thread.sleep(60 * 60 * 1000);
Pausa el programa durante 1 hora.

Así es como se puede usar en la práctica. Digamos que estamos escribiendo un programa que lanzará una nave espacial. Así es como podría verse el código:

for (int i = 10; i > 0; i--)
{
   System.out.println(i);
   Thread.sleep(1000);
}

System.out.println("Let's go!");
Cada segundo, el programa mostrará un número: 10, luego 9, luego 8, etc.




Cuando la cuenta llegue a 0, el programa mostrará " Let's go!"

2. Calcular correctamente una pausa

La duración de la pausa es fácil de calcular. Si necesita que el programa haga algo una vez por segundo, entonces la pausa es de 1000 ms. Si es 2 veces por segundo, haga una pausa de 500 ms (1000/2).

Si necesita hacer algo 15 veces por segundo, haga una pausa de 66 ms (1000/15). Todo parece bastante sencillo:

The duration of one iteration of the loop = 1000 / number of times per second

Pero aquí hay un matiz muy importante. Aunque muchas sentencias se ejecutan muy rápidamente, no son instantáneas.

Mira este. Digamos que tiene una acción que tarda 100 ms en completarse. Desea realizar esta acción 5 veces por segundo. ¿Cuánto tiempo debe hacer una pausa? Definitivamente no 200ms.

Para que la acción se realice 5 veces por segundo, necesitamos que el tiempo requerido para ejecutar la acción más la duración de la pausa sea igual a 200 ms. Si hacemos eso, se ejecutará precisamente 5 veces por segundo. En nuestro caso, la acción requiere 100 ms, lo que significa que todavía quedan 100 ms para la pausa.

pause duration = duration of one iteration of the loop - time required to execute the action

Los desarrolladores de juegos son muy conscientes del hecho de que el tiempo necesario para ejecutar una acción es mucho mayor que cero. Y también lo son las personas que juegan juegos.

Si un juego se ejecuta a 20 FPS, eso significa que solo puede dibujar 20 cuadros en la pantalla en un segundo. 1000/20rinde 50 ms. Este es el tiempo requerido para dibujar un cuadro mientras se juega.



3. Nanosegundos

Las computadoras de hoy son mucho más rápidas que cuando se creó Java. Eso significa que una pausa de 1 milisegundo puede no ser lo suficientemente granular.

Supongamos que tenemos una acción súper breve que queremos realizar 2000 veces por segundo. ¿Cómo hacemos una pausa de medio milisegundo?

Para esto, hay una variante más del Thread.sleep()método:

Thread.sleep(milliseconds, nanoseconds);

Este método pone el programa en reposo durante la cantidad especificada de milisegundos y nanosegundos.

Los nanosegundos son 1 millonésima de milisegundo. Eso significa que una pausa de un milisegundo y medio se vería así:

Thread.sleep(1, 500_000);

Y si desea una pausa de 1/10un milisegundo, debe escribir esto:

Thread.sleep(0, 100_000);

Es posible que no esté utilizando este método en sus programas en este momento. Pero es mejor saberlo y no usarlo que necesitarlo y no saberlo.



4. TimeUnitclase

Por cierto, Java tiene otra clase que te hará la vida más fácil si decides ralentizar tu aplicación. Estamos hablando de la TimeUnitclase en el java.util.concurrentpaquete.

Recuerde que dado que la clase no está en el java.langpaquete, debe agregar la línea import java.util.concurrent.TimeUnit;o escribir java.util.concurrent.TimeUnitcada vez en su código.

Esta clase hace lo mismo que Thread.sleep(), pero es más conveniente:

TimeUnit.HOURS.sleep(15)

Este código pondrá su programa a dormir durante 15 horas. Minutos, segundos, días también están disponibles. Así como microsegundos (1/1000.000) y nanosegundos (1/1000.000.000).

La TimeUnit clase tiene las siguientes propiedades:

  • nanosegundos:NANOSECONDS
  • microsegundos:MICROSECONDS
  • milisegundos:MILLISECONDS
  • segundosSECONDS
  • minutos:MINUTES
  • horas:HOURS
  • días:DAYS

Trabajar con estas propiedades es muy conveniente, ya que no hay necesidad de pensar en convertir, digamos, horas en milisegundos. Dicho código es mucho más agradable de escribir y leer.

Se pueden leer más detalles aquí .