man in white dress shirt sitting on black rolling chair while facing black computer set and smiling
COMPARTE ESTE ARTÍCULO

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. 

 

 

man in white dress shirt sitting on black rolling chair while facing black computer set and smiling


NUESTRAS ÚLTIMAS PUBLICACIONES

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO