Está en la página 1de 3

PROGRAMACIÓN ORIENTADA A OBJETOS

TRABAJO PRACTICO N° 5

SUBPROCESAMIENTO MULTIPLE

1. Realizar una aplicación que tiene en su interfaz gráfica un botón y una lista
de selección con algunos ítems para seleccionar. Simule una tarea que tarda
10 segundos y arranca la misma cuando pulsa el botón. Realizar una segunda
versión donde al presionar el botón se crea un hilo que ejecuta la tarea. Ni bien
se presiona el botón se debe deshabilitar el botón y cuando la tarea termina
habilitar nuevamente.

2. Utilizar hilos para simular una carrera por postas en donde participan dos
equipos de cuatro atletas cada uno. Cada atleta tarda entre 4 a 6 segundos en
su recorrido. Cuando termina le pasa el testigo al siguiente atleta del mismo
equipo. La carrera termina cuando corrieron todos los atletas de los dos
equipos. Al finalizar la carrera, indique el equipo ganador. Hay varias clases
que proveen métodos que retornan el tiempo en milisegundos del sistema (las
cuales nos pueden servir para medir tiempos). Por ejemplo:
System.currentTimeMillis()

3. Realizar una aplicación donde se crean 10 hilos que leen y 2 hilos que
escriben sobre el mismo recurso. Cuando un lector comienza la lectura llama a
lockRead y cuando termina llama a unlockRead. Cuando un escritor comienza la
escritura llama a lockWrite y cuando termina llama a unlockWrite. Los lectores
y los escritores tardan entre 3 a 5 segundos en realizar su tarea.

public class ReadWriteLock{

private int readers = 0;


private int writers = 0;
private int writeRequests = 0;

public synchronized void lockRead() throws InterruptedException{


while(writers > 0 || writeRequests > 0){
wait();
}
readers++;
}

public synchronized void unlockRead(){


readers--;
notifyAll();
}

public synchronized void lockWrite() throws InterruptedException{


writeRequests++;

while(readers > 0 || writers > 0){


wait();
}
writeRequests--;
writers++;
}
PROGRAMACIÓN ORIENTADA A OBJETOS

TRABAJO PRACTICO N° 5

SUBPROCESAMIENTO MULTIPLE

public synchronized void unlockWrite() throws InterruptedException{


writers--;
notifyAll();
}
}

4. Simular la carrera de la liebre y la tortuga. Los competidores comienzan la


carrera en el cuadro 1. Cada cuadro representa una posición a lo largo de la
carrera. La meta está en el cuadro 70. El primer competidor que llegue o pase
el cuadro 70 gana.

Tortuga Paso rápido 50% Avanza 3 cuadros


Resbalón 20% Retrocede 6 cuadros
Paso lento 30% Avanza 1 cuadro

Liebre Dormir 20% No se mueve


Salto grande 20% Avanza 9 cuadros
Resbalón 10% Retrocede 12 cuadros
Salto pequeño 30% Avanza 1 cuadro
Resbalón pequeño 20% Retrocede 2 cuadros

Colocar cada uno de los competidores en un hilo. Al principio de la carrera,


invoque los métodos start de cada uno de los hilos. Use wait, notify y notifyAll
para sincronizar las actividades de los competidores.

5. Escribir un programa que demuestre que al ejecutarse un hilo de alta


prioridad, se retarda la ejecución de todos los hilos de más baja prioridad.
Probar de añadir sleep a un hilo de alta prioridad para dar a los hilos de más
baja prioridad oportunidad de ejecutarse.

6. Una empresa necesita simular la fase final de su línea de producción donde


se empacan los mismos. La empresa tiene tres equipos que depositan un
producto en una cinta de empaque cada 2 a 3 segundos. La cinta de empaque
tiene una capacidad para almacenar hasta 12 productos. La empacadora saca
de la cinta de empaque un producto cada segundo y cuando llega a los 6
productos demora 3 segundos adicionales en terminar de empacar el producto
(cerrar la caja).
Mostrar por pantalla los productos que ingresan a la cinta de empaque y de que
equipo proviene. Mostrar también cuando la empacadora termina en empacar
los productos. Para la simulación suponga que cada equipo produce un total de
24 productos cada uno.

7. Utilizar hilos para simular una cola de impresión que comparten dos
impresoras. Se pueden encolar hasta cinco documentos. En la cola además del
PROGRAMACIÓN ORIENTADA A OBJETOS

TRABAJO PRACTICO N° 5

SUBPROCESAMIENTO MULTIPLE

nombre de documento a imprimir se registra la cantidad de hojas y cantidad de


copias del mismo. Asuma que cada impresora tiene una velocidad de una
página por segundo. Mostrar por pantalla los documentos que ingresan en la
cola y los que cada impresora termina de imprimir.

8. Simular el funcionamiento de una peluquería. La peluquería tiene un


peluquero, una silla de peluquero y n sillas para que se sienten los clientes en
espera, si es que los hay. Si no hay clientes presentes, el peluquero se sienta
en la silla de peluquero y se duerme. Cuando llega un cliente, éste debe
despertarlo. Si llegan más clientes mientras el peluquero corta el cabello de un
cliente, ellos se sientan (si hay sillas desocupadas).

9. Simular un planeta acuático reticulado de dimensión 20x20. Este planeta


está habitado por peces y tiburones de ambos sexos. Escribir un programa que
inicialmente sitúe en forma aleatoria 100 peces (50 machos y 50 hembras) y 10
tiburones (5 machos y 5 hembras) en el planeta de manera que:
 Cada habitante del mundo (pez o tiburón) esté representado por un hilo
concurrente.
 Cada habitante del mundo nada desde la posición en que se encuentra una
posición hacia el norte, sur, este u oeste (si no puede avanzar elige otra
dirección).
 Si habitantes del mundo se encuentran en la misma posición ocurre lo
siguiente:
a) si son del mismo sexo y de la misma especie, uno aniquila al otro.
b) si son de especies diferentes, el tiburón siempre aniquila al pez.
c) si son de la misma especie y de distinto sexo, se reproducen,
generando un nuevo individuo cuyo sexo será macho o hembra con igual
probabilidad, y luego continúan su camino.

10. Utilizar varios hilos concurrentes para encontrar el valor máximo de un


array de 100 números enteros generados aleatoriamente. Cada hilo investigará
un subarray de 10 unidades, y el programa principal deberá coordinarse con
ellos, para extraer la solución final de las soluciones parciales. Provea la
exclusión mutua y la sincronización que considere necesarias.

También podría gustarte