Enunciado: Simulación de un Sistema de Impresión con Hilos

Planteamiento

Un centro de trabajo tiene una única impresora compartida por varios usuarios. Cada usuario puede enviar un documento para imprimir, pero deben esperar su turno, ya que la impresora solo puede procesar un documento a la vez. Diseña un programa en Java que simule este sistema utilizando hilos.


Requisitos

  1. Clases necesarias:
    • Una clase Impresora que gestione el acceso exclusivo a la impresora.
    • Una clase Usuario que represente a los hilos que envían documentos para imprimir.
  2. Funcionamiento del sistema:
    • Cada usuario debe intentar enviar su documento a la impresora.
    • Si la impresora está ocupada, el usuario debe esperar hasta que esté libre.
    • Una vez que la impresora termine de procesar un documento, se notificará al siguiente usuario.
  3. Simulación:
    • Simula un sistema con una impresora y 5 usuarios.
    • Cada usuario envía 3 documentos para imprimir.
  4. Salida esperada:
    • Muestra mensajes indicando cuándo un usuario envía un documento, cuándo la impresora empieza a procesarlo y cuándo termina.

Código Base

class Impresora {
    public synchronized void imprimir(String documento, String usuario) throws InterruptedException {
        System.out.println(usuario + " está imprimiendo: " + documento);
        Thread.sleep(2000); // Simula el tiempo de impresión
        System.out.println("Impresión completada: " + documento + " por " + usuario);
    }
}

class Usuario implements Runnable {
    private final Impresora impresora;
    private final String nombre;

    public Usuario(Impresora impresora, String nombre) {
        this.impresora = impresora;
        this.nombre = nombre;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 3; i++) { // Cada usuario imprime 3 documentos
            String documento = "Documento-" + i;
            try {
                impresora.imprimir(documento, nombre);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Hilo interrumpido.");
            }
        }
    }
}

public class SistemaImpresion {
    public static void main(String[] args) {
        Impresora impresora = new Impresora();

        // Crear 5 usuarios (hilos)
        for (int i = 1; i <= 5; i++) {
            Thread usuario = new Thread(new Usuario(impresora, "Usuario-" + i));
            usuario.start();
        }
    }
}

Requisitos de Salida

El programa debe mostrar una salida como esta (puede variar debido a la concurrencia):

Usuario-1 está imprimiendo: Documento-1
Impresión completada: Documento-1 por Usuario-1
Usuario-2 está imprimiendo: Documento-1
Impresión completada: Documento-1 por Usuario-2
Usuario-3 está imprimiendo: Documento-1
Impresión completada: Documento-1 por Usuario-3
...
Usuario-5 está imprimiendo: Documento-3
Impresión completada: Documento-3 por Usuario-5

Conceptos Evaluados

  1. Uso correcto de synchronized para garantizar que solo un usuario pueda imprimir a la vez.
  2. Creación y gestión de hilos mediante la implementación de Runnable.
  3. Simulación de un recurso compartido (la impresora) y su acceso ordenado.

Este programa básico incluye los elementos esenciales para trabajar con hilos en Java y asegura un nivel de dominio necesario para manejar concurrencia básica.

computer c code
Photo by Pixabay on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad