Importante ejecutar como Administrador!!
Aplicacion desktop para administrar y mejorar el rendimiento en Windows 10 y Windows 11.
La concurrencia en este código se logra a través del uso de SwingWorker, que permite ejecutar tareas en segundo plano en un hilo separado, de esta manera se logra que en tiempo real se obtenga la informacion en pantalla de lo que está arrojando el CMD y no tener que esperar hasta el final. Hay dos métodos principales que se sobrescriben en SwingWorker:
doInBackground(): Este método se ejecuta en un hilo separado y es donde se realiza la tarea en segundo plano. En este caso, la tarea es ejecutar un comando del sistema operativo y leer su salida.
process(): Este método se ejecuta en el hilo de despacho de eventos de Swing y se utiliza para actualizar la interfaz gráfica de usuario con los resultados de la tarea en segundo plano. En este caso, se utiliza para agregar la salida del comando a un área de texto.
Este proyecto incluye un ejemplo sencillo de cómo implementar concurrencia en Java utilizando hilos (threads) y mecanismos de sincronización. El objetivo es simular el funcionamiento de un restaurante de manera grafica.
-
Inicio de la aplicación: Cuando se inicia la aplicación, se crea una instancia de
Restaurante
y se llama al métodoiniciar()
. Este método inicia los hilosMesero
y agrega losCliente
a la cola. -
Atención de los clientes: Cada hilo
Mesero
intenta obtener unCliente
de la cola. Si la cola está vacía, el hiloMesero
espera hasta que haya unCliente
disponible. Una vez que unMesero
obtiene unCliente
, lo atiende. La atención del cliente implica mover alMesero
a la ubicación delCliente
, esperar un tiempo aleatorio para simular la atención, y luego mover alMesero
de vuelta a su posición original. -
Interfaz gráfica de usuario: La interfaz gráfica de usuario muestra a los
Cliente
y a losMesero
. Cuando unCliente
es atendido, se elimina de la interfaz gráfica de usuario. Cuando todos losCliente
han sido atendidos, se muestra un mensaje y se interrumpen los hilosMesero
. -
Interrupción de los hilos: Los hilos Mesero pueden ser interrumpidos de dos maneras. Una forma es cuando el numero de Clientes sobrepasa el limite de atendidos (1000). La otra forma es cuando se pulsa el botón de detener. Cuando un hilo Mesero es interrumpido, deja de atender a los Cliente y cambia su estado a interrumpido, después de un poco, termina su ejecución.
-
Detener los meseros: Cuando se pulsa el botón de detener, se interrumpen todos los hilos Mesero y se cierra la interfaz gráfica de usuario del restaurante.
-
Hilos: En Java, la concurrencia se logra a través del uso de hilos. Un hilo es una unidad de ejecución dentro de un proceso. En este código, cada
Mesero
se ejecuta en su propio hilo. Esto permite que variosMesero
atiendan a losCliente
al mismo tiempo, al igual que en un restaurante real. -
Sincronización: La sincronización es un aspecto importante de la programación concurrente. En este código, se utiliza un objeto de bloqueo (
lock
) para asegurar que sólo un hiloMesero
pueda acceder a la cola deCliente
en un momento dado. Esto evita las condiciones de carrera, que pueden ocurrir cuando dos o más hilos intentan modificar una variable compartida al mismo tiempo. -
Comunicación entre hilos: Los hilos
Mesero
yCliente
se comunican entre sí a través de la cola deCliente
. Cuando unCliente
es atendido, se elimina de la cola. Si la cola está vacía, los hilosMesero
esperan hasta que haya unCliente
disponible. -
Interrupción de hilos: Los hilos
Mesero
pueden ser interrumpidos, lo que les permite terminar su ejecución antes de tiempo. Esto se utiliza en este código para detener a losMesero
una vez que todos losCliente
han sido atendidos, o cuando se pulsa el botón de detener. -
Espera activa: La espera activa se utiliza en este código para simular el tiempo que tarda un
Mesero
en atender a unCliente
. Esto se logra haciendo que el hiloMesero
duerma durante un tiempo aleatorio.
La documentación completa del proyecto está disponible en este PDF.
Para ver una demostración de la aplicación en funcionamiento, puedes ver este video:
Brayan Barco
Este proyecto está licenciado bajo la Apache License 2.0 - ver el archivo LICENCIA para más detalles.