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

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

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

Contenido restringido

Acceso de usuarios existentes

Demuestra que eres un ser humano


   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso

Demuestra que eres un ser humano


ESTADO DE ACCESO

Demuestra que eres un ser humano


TRADUCTORES
COMPARTENOS
Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert

Contenido Protegido

error: CONTENIDO PROTEGIDO