A continuación, te presento dos ejercicios prácticos en Java, uno enfocado en la implementación de threads y otro en el uso de semáforos. Cada ejercicio viene con un enunciado detallado y el resultado esperado.
Ejercicio 1: Implementación de Threads
Enunciado:
Crea un programa en Java que simule la creación y ejecución de tres tareas diferentes utilizando threads. Cada tarea deberá imprimir un mensaje indicando el inicio y el fin de su ejecución, junto con el nombre del thread que la está ejecutando. Además, cada tarea debe esperar un tiempo aleatorio entre 1 y 3 segundos antes de terminar.
Código:
import java.util.Random;
class MiTarea implements Runnable {
private String nombreTarea;
public MiTarea(String nombreTarea) {
this.nombreTarea = nombreTarea;
}
@Override
public void run() {
try {
System.out.println(nombreTarea + " iniciada por: " + Thread.currentThread().getName());
Random random = new Random();
int tiempoEspera = random.nextInt(3000) + 1000; // Tiempo de espera entre 1 y 3 segundos
Thread.sleep(tiempoEspera);
System.out.println(nombreTarea + " finalizada por: " + Thread.currentThread().getName());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public class Main {
public static void main(String[] args) {
Thread hilo1 = new Thread(new MiTarea("Tarea 1"), "Hilo 1");
Thread hilo2 = new Thread(new MiTarea("Tarea 2"), "Hilo 2");
Thread hilo3 = new Thread(new MiTarea("Tarea 3"), "Hilo 3");
hilo1.start();
hilo2.start();
hilo3.start();
}
}
Resultado Esperado:
Al ejecutar el programa, verás una salida similar a esta (los tiempos pueden variar debido a la aleatoriedad):
Tarea 1 iniciada por: Hilo 1
Tarea 2 iniciada por: Hilo 2
Tarea 3 iniciada por: Hilo 3
Tarea 2 finalizada por: Hilo 2
Tarea 3 finalizada por: Hilo 3
Tarea 1 finalizada por: Hilo 1
Ejercicio 2: Uso de Semáforos
Enunciado:
Implementa un programa en Java donde cinco threads intentan acceder a un recurso compartido, pero solo dos de ellos pueden acceder al mismo tiempo. Utiliza un semáforo para controlar el acceso concurrente. Cada thread debe imprimir un mensaje cuando accede al recurso y otro cuando lo libera, junto con su nombre. Además, cada thread debe simular un trabajo dentro del recurso esperando entre 1 y 2 segundos antes de liberar el semáforo.
Código:
import java.util.concurrent.Semaphore;
import java.util.Random;
class RecursoCompartido {
private Semaphore semaforo;
public RecursoCompartido(int permisos) {
this.semaforo = new Semaphore(permisos);
}
public void accederRecurso(String nombreThread) {
try {
semaforo.acquire();
System.out.println(nombreThread + " accedió al recurso.");
Random random = new Random();
int tiempoEspera = random.nextInt(2000) + 1000; // Tiempo de espera entre 1 y 2 segundos
Thread.sleep(tiempoEspera);
System.out.println(nombreThread + " liberó el recurso.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
semaforo.release();
}
}
}
class MiTarea implements Runnable {
private RecursoCompartido recurso;
private String nombreThread;
public MiTarea(RecursoCompartido recurso, String nombreThread) {
this.recurso = recurso;
this.nombreThread = nombreThread;
}
@Override
public void run() {
recurso.accederRecurso(nombreThread);
}
}
public class Main {
public static void main(String[] args) {
RecursoCompartido recurso = new RecursoCompartido(2); // Solo 2 threads pueden acceder al mismo tiempo
Thread hilo1 = new Thread(new MiTarea(recurso, "Hilo 1"));
Thread hilo2 = new Thread(new MiTarea(recurso, "Hilo 2"));
Thread hilo3 = new Thread(new MiTarea(recurso, "Hilo 3"));
Thread hilo4 = new Thread(new MiTarea(recurso, "Hilo 4"));
Thread hilo5 = new Thread(new MiTarea(recurso, "Hilo 5"));
hilo1.start();
hilo2.start();
hilo3.start();
hilo4.start();
hilo5.start();
}
}
Resultado Esperado:
Al ejecutar el programa, deberías ver una salida similar a esta (el orden puede variar debido a la concurrencia):
Hilo 1 accedió al recurso.
Hilo 2 accedió al recurso.
Hilo 1 liberó el recurso.
Hilo 3 accedió al recurso.
Hilo 2 liberó el recurso.
Hilo 4 accedió al recurso.
Hilo 3 liberó el recurso.
Hilo 5 accedió al recurso.
Hilo 4 liberó el recurso.
Hilo 5 liberó el recurso.
Estos ejercicios te ayudarán a comprender cómo trabajar con threads y semáforos en Java. Practica modificando los ejemplos y observa cómo cambian los resultados según los cambios que realices. ¡Buena suerte!
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- Las maravillas de las ciencias biológicas según la Academia SanRoque
- La motivación en Academia SanRoque
- Los docentes también se divierten.
- Comandos Principales en MongoDB y sus Equivalentes en Java
- Las bondades de escribir y leer cada día: herramientas esenciales para la vida académica, empresarial y social
- Immanuel Kant: Disertación contra las IA
- Forma Normal de Boyce-Codd (FNBC) en Bases de Datos
- Las Formas Normales en Bases de Datos
- La importancia de rodearte de personas virtuosas para alcanzar tus metas
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed