Cuando ejecutas un programa, se inicia un hilo (thread), es decir, una secuencia de tareas que se procesan en orden, desde la primera hasta la última, hasta terminar y por tanto el hilo/proceso se cierra.
Esas tareas dependen de las instrucciones del programa y la siguiente tarea solo comienza cuando ha finalizado la tarea anterior
Por ejemplo, en el código que yo puse, se ejecutan cuatro tareas, que son mostrar los cuatro mensajes en pantalla.
Como hemos visto en ese mismo ejemplo, el hilo/proceso que se inicia para llevar a cabo estas tareas podemos mandarlo "dormir" con Thread.sleep() durante un tiempo determinado.
Bueno, la mayoría de programas que hacemos suelen ser "monohilo", o sea, un único hilo/proceso para realizar las tareas.
Pero para programas más avanzados vamos a preferir, incluso necesitar, hacer un programa "multihilo", es decir, abrir varios hilos de ejecución para repartir tareas y no sobrecargar el hilo principal.
Imagina por ejemplo, no se, que haces un programa en el que el usuario pueda juntar y editar vídeos y subir su composición a un servidor de Internet, tipo youtube, para que otros lo vean.
Si nuestro programa fuese monohilo, cuando el usuario ordena subir el vídeo al servidor, el programa quedaría paralizado hasta que el vídeo terminase de transferirse por completo.
Como dije antes, en un hilo la tarea siguiente no se ejecuta hasta que finaliza la tarea anterior.
Y si esta tarea anterior consiste en subir un vídeo, lo cuál puede llevar varios minutos, significa parar la "productividad" del programa hasta que este proceso termine.
Pero, si nuestro programa fuese multihilo, podríamos hacer que el proceso de subir el vídeo se encargase un hilo distinto al del programa principal. Así el vídeo se va subiendo en segundo plano y mientras tanto el usuario puede empezar a trabajar en su siguiente vídeo.
Incluso puede poner varios vídeos a subir al mismo tiempo.
Te he puesto un ejemplo muy concreto, pero tiene multitud de usos. Siempre que necesitemos realizar una tarea que sabemos que puede demorar cierto tiempo, aunque sea unos cuantos segundos, vamos a preferir hacerlo en un hilo separado para que la aplicación principal no se quede bloqueada esperando a que termine esa otra tarea más pesada.
En Java es muy fácil crear hilos. La habitual es usar la clase Thread.
Aquí pongo un pequeño ejemplo donde escribo una clase que hereda de Thread mediante la cuál poder crear hilos.
Estos hilos van a hacer una tarea estúpida, incrementar 3 bucles for anidados entre sí.
Es una tarea estúpida, pero pesada, de hecho en ordenadores poco potentes puede tardar un poquito en completarse esos bucles for.
En el ejemplo lo que hago es crear e iniciar 5 hilos paralelos realizando esta tarea.
Lanzan un mensaje cuando empieza y otro cuando terminan.
Esto sirve para ver algo importante sobre los hilos, cada uno va a su ritmo, según el sistema operativo les va dando/quitando recursos.
Esto implica que el primer hilo en activarse, luego puede que sea el último en terminar.
A continuación pondré el código para que lo pruebes y te hagas una idea.
De todos modos, ahora mismo te diría que no inviertas tiempo ni esfuerzo en esto de crear hilos.
No es algo que vayas a necesitar ahora y mejor invertir tiempo en aprender otras cosas de Java más necesarias e importantes.
Por ahora basta con que sepas que esto existe. Eso sí, pregunta lo que quieras.
Un saludo.
public class MultiHilo {
//Clase que hereda de Thread para crear un hilo de ejecución
private static class Hilo extends Thread {
private String nombreHilo;
public Hilo(String nombre) {
nombreHilo = nombre;
}
@Override
public void run() {
System.out.println("Iniciado el hilo " + nombreHilo);
for (int i = 0; i < 100000; i++) {
for (int j = 0; j < 100000; j++)
for (int z = 0; z < 100000; z++);
}
System.out.println("Finalizado el hilo " + nombreHilo);
}
}
//Método main para probar los hilos
public static void main(String[] args) {
Hilo hilo1 = new Hilo("Hilo 1");
Hilo hilo2 = new Hilo("Hilo 2");
Hilo hilo3 = new Hilo("Hilo 3");
Hilo hilo4 = new Hilo("Hilo 4");
Hilo hilo5 = new Hilo("Hilo 5");
//Iniciamos los hilos
hilo1.start();
hilo2.start();
hilo3.start();
hilo4.start();
hilo5.start();
}
}