Runnable y Thread en Java - Ejecutar código cada cierto tiempo

Java – Ejecutar código de manera repetitiva cada cierto tiempo con Runnable y Thread

Hoy veremos cómo usar Thread y Runnable en Java para ejecutar código cada N milisegundos en un hilo separado del principal.

Crearemos un Runnable y lo vamos a ejecutar en un nuevo hilo creado con Thread, de esa manera podremos imprimir un mensaje cada segundo para demostrar el uso, aunque en la vida real podría servir para otras cosas.

Runnable y Thread en Java - Ejecutar código cada cierto tiempo
Runnable y Thread en Java – Ejecutar código cada cierto tiempo

Personalmente utilicé esto para refrescar un reloj en una interfaz creada con Swing.

Un poco de historia

Estaba en mi trabajo y tenía que entregar un proyecto, ya todo estaba terminado excepto una cosa: un reloj que iba en la interfaz (era algo de un checador de horarios).

Si estuviera en JavaScript, habría usado al buen amigo setInterval, pero no, esto es Java. Así que investigando un poco encontré que la combinación de Runnable y Thread en Java pueden ser un equivalente a setInterval de JavaScript.

Nota

Sé que este no es el lugar, pero nunca es malo decirlo: Java y JavaScript no son lo mismo, solamente estoy mencionando alternativas, ya que lo único que tienen en común es que ambos son lenguajes de programación.

Runnable y Thread en Java

Bueno, ahora sí a lo que venimos. Ya lo dije hace un momento, para demostrar el uso de esto vamos a imprimir un mensaje en la consola cada segundo.

De esa manera vamos a ejecutar código cada cierto tiempo sin interrumpir el hilo principal de la app.

Definir el Runnable

Definimos un nuevo objeto de tipo Runnable y sobrescribimos el método run. Dentro del método ponemos un ciclo while infinito (el cual detendría el hilo principal, pero como no es el principal, no pasará nada).

Ya dentro del ciclo dormimos o esperamos determinado tiempo y ejecutamos el código que será repetido. Por lo tanto queda así:

Runnable runnable = new Runnable() {
  @Override
  public void run() {
    // Esto se ejecuta en segundo plano una única vez
    while (true) {
      // Pero usamos un truco y hacemos un ciclo infinito
      try {
        // En él, hacemos que el hilo duerma
        Thread.sleep(1000);
        // Y después realizamos las operaciones
        System.out.println("Me imprimo cada segundo");
        // Así, se da la impresión de que se ejecuta cada cierto tiempo
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
};

El método Thread.sleep recibe el número de milisegundos que el hilo duerme. Como queremos que el código se repita cada segundo, dormimos mil milisegundos.

Thread.sleep puede generar una excepción de tipo InterruptedException así que la manejamos con un try catch. No está de más mencionar que también va a lanzar una de tipo IllegalArgumentException si el número de milisegundos es negativo.

Más información en la documentación oficial.

Ejecutar Runnable con Thread

Una vez que ya definimos el Runnable, lo ejecutamos en un nuevo hilo. El siguiente código lo demuestra:

// Creamos un hilo y le pasamos el runnable
Thread hilo = new Thread(runnable);
hilo.start();

Gracias a esto podríamos crear más hilos y todo eso.

Ejemplo de Runnable y Thread en Java

Ahora pongamos todo junto y veamos un ejemplo en donde se ejecuta el código de manera repetitiva cada cierto tiempo. La clase Main queda así:

/*
	Ejemplo con Runnable y Thread para ejecutar código cada cierto
	tiempo en Java

	@author parzibyte.me
*/
class Main {
	public static void main(String[] args) {
		Runnable runnable = new Runnable() {
			@Override
			public void run() {
				// Esto se ejecuta en segundo plano una única vez
				while (true) {
					// Pero usamos un truco y hacemos un ciclo infinito
					try {
						// En él, hacemos que el hilo duerma
						Thread.sleep(1000);
						// Y después realizamos las operaciones
						System.out.println("Me imprimo cada segundo");
						// Así, se da la impresión de que se ejecuta cada cierto tiempo
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		// Creamos un hilo y le pasamos el runnable
		Thread hilo = new Thread(runnable);
		hilo.start();

		// Y aquí podemos hacer cualquier cosa, en el hilo principal del programa
		System.out.println("Yo imprimo en el hilo principal");
	}
}

En el hilo principal realizamos las operaciones comunes mientras que en el que creamos se estará ejecutando de manera separada y paralela.

Probar ejemplo

Eres libre de descargar el código. Recuerda instalar Java y luego NetBeans.

Con eso terminamos por hoy. Te invito a leer más sobre Java.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

2 comentarios en “Java – Ejecutar código de manera repetitiva cada cierto tiempo con Runnable y Thread”

  1. Pingback: Java y swing: mostrar y refrescar reloj con hora actual - Parzibyte's blog

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *