Table of Contents
Simular la descarga de archivos en distintos hilos en Java
En este ejercicio tendremos dos hilos; cada uno simulará la descarga de un archivo. Cada hilo imprimirá mensajes como: "Descargando archivo ... (progreso)", con pausas de 500 milisegundos para simular el tiempo de descarga. El bucle for irá de 5 hacia 0. De esta manera, podemos observar cómo varios procesos pueden ejecutarse al mismo tiempo.
📎Cómo crear e iniciar hilos en Java con Thread
Explicación paso a paso
Creación de hilos con Thread
Has creado dos hilos (fichero_Uno y fichero_Dos) usando expresiones lambda, lo que simplifica mucho el código frente a usar clases que extiendan Thread o implementen Runnable.
Simulación de descarga
Cada hilo ejecuta un bucle for que va desde 5 hasta 0.
Se imprime el progreso con System.out.println.
Se usa Thread.sleep(500) para simular que cada "paso" tarda medio segundo.
Finalización de descarga
Después del bucle, cada hilo imprime un mensaje de éxito independiente.
Como los hilos se ejecutan en paralelo, el orden de ejecución de las líneas puede variar entre ejecuciones (esto es el multihilo real en acción).
Salida esperada
El orden nunca es exactamente el mismo, porque depende de cómo el planificador de la JVM asigne CPU a cada hilo.
A veces fichero 1 puede adelantarse, a veces fichero 2. Eso es lo natural y lo hace interesante.
public class DescargarDeArchivo {
public static void main(String[] args) {
// Primer hilo llamado fichero Uno.
// Para cada hilo se ejecuta un bucle for.
// Sleep simula una pausa de 500 milisegundos con cada iteracción.
// Si existe un error será capturado y lanzará un error.
// Finalmente, se imprime el archivo ha sido descargado con éxito.
Thread fichero_Uno = new Thread (() ->
{for (int i = 5; i >= 0; i--)
{
System.out.println("Descargando el fichero 1....." + i + "#");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("El archivo 1 ha sido descargado con éxito.....");
});
Thread fichero_Dos = new Thread(() ->
{
for (int i = 5; i >= 0; i--) {
System.out.println("Descargando el fichero 2....." + i + "#");
try {
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
System.out.println("El archivo 2 ha sido descargado con éxito.....");
});
fichero_Uno.start();
fichero_Dos.start();
// Si añadimos join(), el main espera y no continúa hasta que ese hilo haya terminado.
try {
fichero_Uno.join();
fichero_Dos.join();
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
// salida:
//Descargando el fichero 1…..5#
//Descargando el fichero 2…..5#
//Descargando el fichero 2…..4#
//Descargando el fichero 1…..4#
//Descargando el fichero 2…..3#
//Descargando el fichero 1…..3#
//Descargando el fichero 2…..2#
//Descargando el fichero 1…..2#
//Descargando el fichero 2…..1#
//Descargando el fichero 1…..1#
//Descargando el fichero 2…..0#
//Descargando el fichero 1…..0#
//El archivo 2 ha sido descargado con éxito…..
//El archivo 1 ha sido descargado con éxito…..

Seguir leyendo:





