hands on a laptop keyboard
COMPARTE ESTE ARTÍCULO

La programación concurrente es un aspecto fundamental en el desarrollo de aplicaciones modernas, permitiendo a los programas realizar múltiples tareas de manera simultánea. Java ofrece potentes herramientas para manejar la concurrencia, entre ellas, los threads y los semáforos. En este artículo, te presento dos ejercicios prácticos que te ayudarán a entender mejor cómo funcionan estos conceptos en la práctica.


Ejercicio 1: Implementación de Threads

Enunciado:

Crea un programa en Java que simule un banco de pruebas de vehículos. En este escenario, tienes tres vehículos que necesitan ser sometidos a pruebas en tres pistas diferentes. Cada pista solo puede manejar un vehículo a la vez. El programa debe utilizar threads para simular que los vehículos acceden a las pistas, permanecen en ellas por un tiempo aleatorio, y luego se liberan. Cada thread debe imprimir un mensaje indicando cuándo el vehículo entra en la pista, cuánto tiempo pasa en ella, y cuándo la deja.

Código:

import java.util.Random;

class Vehiculo extends Thread {
    private String nombre;
    private int pista;

    public Vehiculo(String nombre, int pista) {
        this.nombre = nombre;
        this.pista = pista;
    }

    @Override
    public void run() {
        try {
            System.out.println(nombre + " entrando en la pista " + pista);
            Random random = new Random();
            int tiempoPrueba = random.nextInt(5000) + 2000; // Tiempo de prueba entre 2 y 5 segundos
            Thread.sleep(tiempoPrueba);
            System.out.println(nombre + " completó la prueba en la pista " + pista + " en " + (tiempoPrueba / 1000) + " segundos.");
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

public class BancoPruebas {
    public static void main(String[] args) {
        Vehiculo vehiculo1 = new Vehiculo("Vehículo 1", 1);
        Vehiculo vehiculo2 = new Vehiculo("Vehículo 2", 2);
        Vehiculo vehiculo3 = new Vehiculo("Vehículo 3", 3);

        vehiculo1.start();
        vehiculo2.start();
        vehiculo3.start();
    }
}

Resultado Esperado:

Al ejecutar el programa, verás una salida similar a esta (los tiempos pueden variar debido a la aleatoriedad):

Vehículo 1 entrando en la pista 1
Vehículo 2 entrando en la pista 2
Vehículo 3 entrando en la pista 3
Vehículo 2 completó la prueba en la pista 2 en 3 segundos.
Vehículo 1 completó la prueba en la pista 1 en 4 segundos.
Vehículo 3 completó la prueba en la pista 3 en 5 segundos.

Ejercicio 2: Uso de Semáforos

Enunciado:

Crea un programa en Java que simule un laboratorio de computación con cuatro computadoras. Hay seis estudiantes que necesitan usar las computadoras, pero solo cuatro pueden hacerlo al mismo tiempo. Utiliza semáforos para controlar el acceso de los estudiantes a las computadoras. Cada estudiante debe imprimir un mensaje cuando comienza a usar una computadora y otro cuando termina de usarla, indicando qué computadora estaba usando.

Código:

import java.util.concurrent.Semaphore;

class Estudiante extends Thread {
    private String nombre;
    private Semaphore semaforo;

    public Estudiante(String nombre, Semaphore semaforo) {
        this.nombre = nombre;
        this.semaforo = semaforo;
    }

    @Override
    public void run() {
        try {
            semaforo.acquire();
            int computadora = semaforo.availablePermits() + 1; // Para identificar la computadora utilizada
            System.out.println(nombre + " comenzó a usar la computadora " + computadora);
            Thread.sleep((long) (Math.random() * 3000) + 2000); // Simula el tiempo de uso entre 2 y 5 segundos
            System.out.println(nombre + " terminó de usar la computadora " + computadora);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            semaforo.release();
        }
    }
}

public class LaboratorioComputacion {
    public static void main(String[] args) {
        Semaphore semaforo = new Semaphore(4); // 4 computadoras disponibles

        Estudiante estudiante1 = new Estudiante("Estudiante 1", semaforo);
        Estudiante estudiante2 = new Estudiante("Estudiante 2", semaforo);
        Estudiante estudiante3 = new Estudiante("Estudiante 3", semaforo);
        Estudiante estudiante4 = new Estudiante("Estudiante 4", semaforo);
        Estudiante estudiante5 = new Estudiante("Estudiante 5", semaforo);
        Estudiante estudiante6 = new Estudiante("Estudiante 6", semaforo);

        estudiante1.start();
        estudiante2.start();
        estudiante3.start();
        estudiante4.start();
        estudiante5.start();
        estudiante6.start();
    }
}

Resultado Esperado:

Al ejecutar el programa, verás una salida similar a esta (el orden puede variar debido a la concurrencia):

Estudiante 1 comenzó a usar la computadora 4
Estudiante 2 comenzó a usar la computadora 3
Estudiante 3 comenzó a usar la computadora 2
Estudiante 4 comenzó a usar la computadora 1
Estudiante 4 terminó de usar la computadora 1
Estudiante 5 comenzó a usar la computadora 1
Estudiante 2 terminó de usar la computadora 3
Estudiante 6 comenzó a usar la computadora 3
Estudiante 1 terminó de usar la computadora 4
Estudiante 3 terminó de usar la computadora 2
Estudiante 5 terminó de usar la computadora 1
Estudiante 6 terminó de usar la computadora 3

Conclusión

Estos ejercicios prácticos te proporcionan una introducción sólida a la programación concurrente en Java usando threads y semáforos. Los threads permiten ejecutar tareas en paralelo, mientras que los semáforos son esenciales para controlar el acceso concurrente a recursos compartidos, como en el caso del laboratorio de computación. Practicar con estos conceptos te ayudará a desarrollar aplicaciones más eficientes y escalables. ¡Sigue explorando y experimentando para mejorar tus habilidades de programación concurrente!


¿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. 

 

 

hands on a laptop keyboard


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