Anda di halaman 1dari 2

I.E.S.

Emilio Jimeno
Ester Grao Fernández

Práctica 2: Programación multihilo

Ejercicio 1:
Implementa una simulación de la fábula que cuenta la carrera entre la liebre y la tortuga.
Para hacerlo más interesante la carrera será cuesta arriba por una pista resbaladiza, de modo
que a veces podrán resbalar y retroceder algunas posiciones. Habrá un thread que
implementará la tortuga y otro la liebre. Cada uno se suspenderá durante un segundo y luego
evaluará lo que ha pasado según unas probabilidades:
Animal Suceso Probabilidad Movimiento
Tortuga Avance rápido 50% 3 casillas a la derecha
Resbaló 20% 6 casillas a la izquierda
Avance lento 30% 1 casilla a la derecha
Liebre Duerme 20%
Gran salto 20% 9 casillas a la derecha
Resbalón grande 10% 12 casillas a la izquierda
Pequeño salto 30% 1 casilla a la derecha
Resbalón pequeño 20% 2 casillas a la izquierda

Calcula la probabilidad con random, de 1 a 100 y determina que ha hecho cada animal.
Considera que hay 70 casillas, de la 1 a la 70, la 1 de salida y la 70 de llegada. Si resbala al
principio vuelve a la 1, nunca por debajo. Tras cada segundo y después de calcular su nueva
posición, imprime una línea por cada animal, con blanco de 1 a la posición - 1 y luego una letra
T para la tortuga y una L para la liebre. Imprime al comienzo de la carrera un mensaje. Después
de imprimir las líneas, determina si alguno ha llegado a la meta y ha ganado, imprimiendo un
mensaje. Si ambos llegan a la vez, declara un empate.
(3 puntos)

Ejercicio 2:
Implementa una barrera. Una barrera es un punto de sincronización entre varios threads. Se
caracteriza porque los threads que van llegando a ella esperan hasta que llega el último. Por
ejemplo, se puede sincronizar N threads y hasta que el último no llegue los demás no deben
poder continuar. Prueba a lanzar unos pocos threads, por ejemplo 4, cada uno espere un
I.E.S. Emilio Jimeno
Ester Grao Fernández

tiempo proporcional a su identificador, que luego imprima un mensaje que lo identifique y que
luego espere en la barrera a los otros threads. (3 puntos)

Ejercicio 3:
Se trata de simular el juego para adivinar un número. Se crearán varios hilos, los hilos son los
jugadores que tienen que adivinar el número. Habrá un hilo que generará el número a adivinar,
comprobará la jugada del jugador y averiguará a qué jugador le toca jugar. El número tiene
que estar comprendido entre 1 y 10, usa la siguiente fórmula para generar el número: 1 +
(int) (10 * Math.random());

Se definen 3 clases:
 Árbitro: Contiene el número a adivinar, el turno y muestra el resultado. Se definen los
siguientes atributos: el número total de jugadores, el turno, el número a adivinar y si el
juego acabó o no. En el constructor se recibe el número de jugadores que participan y
se inicializan el número a adivinar y el turno. Tiene varios métodos: uno que devuelve
el turno, otro que indica si el juego se acabó o no y el tercer método que comprueba la
jugada del jugador y averigua a quién le toca a continuación, este método recibirá el
identificador del jugador y el número que ha jugado; deberá definirse como
syncronized, así cuando un jugador está haciendo la jugada, ningún otro podrá
interferir. En este método se indicará cual es el siguiente turno y si el juego ha
finalizado porque algún jugador ha acertado el número.
 Jugador: Extiende Thread. Su constructor recibe un identificador de jugador y el
árbitro, todos los hilos comparten el árbitro. El jugador dentro del método run
comprobará si es su turno, en ese caso generará un número aleatorio entre 1 y 10 y
creará la jugada usando le método correspondiente del árbitro. Este proceso se
repetirá hasta que el juego acabe.
 Main: Esta clase inicializa el árbitro indicándole el número de jugadores y lanza los
hilos de los jugadores, asignando un identificador a cada hilo y enviándoles el objeto
árbitro que tienen que compartir.
(4 puntos)

Anda mungkin juga menyukai