Вы находитесь на странице: 1из 5

Ejercicios de Hilos

ndice
1

Creacin de hilos (0.5 puntos)......................................................................................2

Prioridades (0.5 puntos)............................................................................................... 2

Productor/Consumidor (1 punto)..................................................................................2

Pool de hilos (1 punto)................................................................................................. 3

Copyright 2012-13 Dept. Ciencia de la Computacin e IA All rights reserved.

Ejercicios de Hilos

1. Creacin de hilos (0.5 puntos)


En la clase Ej1 se crean hilos utilizando la interfaz Runnable. De esta forma podremos
crear mltiples hilos que ejecuten el mismo mtodo run de esta clase accediendo al
mismo espacio de memoria de este objeto. Ejecutar el programa, ver lo que hace,
consultar el cdigo fuente y contestar a las siguientes preguntas:
a) Explica qu es lo que hace la condicin de terminacin del bucle while en el mtodo
run. Qu utilidad le ves?
b) Puede haber en algn momento dos hilos ejecutando simultneamente el mtodo run?
c) Si hubiese dos hilos ejecutando el run, podra haber conflictos en el acceso a la
variable ini? Es decir, que un hilo sobrescriba el valor que haba escrito en ella el otro
hilo Por qu?
d) Cmo podemos parar este hilo sin crear uno nuevo?

2. Prioridades (0.5 puntos)


En la clase Ej2 tenemos un programa que muestre una carrera entre tres hilos de distintas
prioridades. Se pide:
a) Cada hilo tiene su propio contador que se va incrementando cada iteracin de dicho
hilo. En este caso, podr haber conflicto en el acceso al contador del hilo entre los
distintos hilos? Por qu?
b) Fjate en el bucle principal en el que se imprime el contador de cada hilo, cul es su
condicin de terminacin?
c) En cada iteracin los hilos hacen una operacin costosa. En este caso estamos forzando
a que llamen al colector de basura (garbage collector) con la instruccin System.gc().
Sustituir esta instruccin por dormir durante 100ms y probar. Qu ocurre en este caso?
Por qu? Volver a dejar el programa como antes, con la llamada al colector de basura.
d) En el mtodo run de Hilo, aade la instruccin necesaria para que en el caso de que el
hilo t sea distinto de null se quede bloqueado hasta que dicho hilo termine su ejecucin.
Probar el programa y ver lo que ocurre en este caso.
e) Prueba cambiando las prioridades de los hilos. Cuando tenemos hilos de alta prioridad
e hilos de baja prioridad, cuando los de alta prioridad terminan, qu ocurre con los de
baja prioridad? por qu?

3. Productor/Consumidor (1 punto)

Copyright 2012-13 Dept. Ciencia de la Computacin e IA All rights reserved.

Ejercicios de Hilos

En este ejercicio vamos a resolver el problema de los productores y los consumidores.


Vamos a definir 3 clases: el hilo Productor, el hilo Consumidor, y el objeto Recipiente
donde el productor deposita el valor producido, y de donde el consumidor extrae los
datos.
El productor se ejecuta durante 10 iteraciones y en cada una de ellas deposita en el
recipiente el nmero de la iteracin actual. Entre iteracin e iteracin se quedar
durmiendo durante un tiempo aleatorio entre 1 y 2 segundos.
El consumidor se ejecuta el mismo nmero de iteraciones que el productor, pero en
cada una de ellas saca el valor almacenado en el recipiente y lo muestra por pantalla.
Entre cada iteracin duerme tambin un tiempo aleatorio entre 1 y 2 segundos.
El recipiente proporciona los mtodos produce y consume para depositar un dato en
l y para sacarlo de l respectivamente.
El programa mostrar cuando el productor produce un valor y cuando el consumidor lo
consume. El funcionamiento correcto debera ser que el consumidor consuma
exactamente los mismos valores que el productor ha producido, sin saltarse ninguno ni
repetirlos. Se pide:
a) Compilar y probar el programa. Funciona correctamente? Por qu? Ejecutar varias
veces y explicar lo que pasa. Qu tendremos que hacer para que funcione correctamente?
b) Vamos a aadir el cdigo necesario en los mtodos produce y consume para
sincronizar el acceso a ellos. El comportamiento debera ser el siguiente:
Si queremos producir y todava hay datos disponibles en el recipiente, esperaremos
hasta que se saquen, si no produciremos y avisamos a posibles consumidores que
estn a la espera.
Si queremos consumir y no hay datos disponibles en el recipiente, esperaremos hasta
que se produzcan, si no consumimos el valor disponible y avisamos a posibles
productores que estn a la espera.
Qu mtodos utilizaremos para la sincronizacin? Insertar el cdigo necesario y
compilar. Probar el programa, da alguna excepcin? En caso afirmativo, por qu? ser
necesario aadir algo ms en el encabezado de los mtodos produce y consume? Hacer
las modificaciones necesarias.
Compilar y comprobar que el programa funciona correctamente.

4. Pool de hilos (1 punto)


Crea una clase ms en el proyecto que se incluye en las plantillas de la sesin, que se
llame Ej4. Declara tareas que implementen Runnable para poder ejecutarlas despus en
un pool de hilos. Las tareas debern recibir un nombre en su creacin (por ejemplo, "A",
"B", etc) y en su mtodo run() imprimirn su nombre de tarea y un contador, de 1 a 10, a
intervalos de 1 segundo.

Copyright 2012-13 Dept. Ciencia de la Computacin e IA All rights reserved.

Ejercicios de Hilos

Utiliza un ThreadPoolExecutor que ejecute como mximo dos tareas simultneamente.


Ejecuta 5 tareas con nombres diferentes y observa que las 3 ltimas quedan encoladas y
se ejecutan despus.

Copyright 2012-13 Dept. Ciencia de la Computacin e IA All rights reserved.

Ejercicios de Hilos

Copyright 2012-13 Dept. Ciencia de la Computacin e IA All rights reserved.

Вам также может понравиться