You are on page 1of 3

Prctica de Hilos

Lenguaje de programacin
En el siguiente ejercicio se pretende simular el proceso de cobro de un
supermercado; es decir, unos clientes van con un carro lleno de productos y
una cajera les cobra los productos, pasndolos uno a uno por el escaner de la
caja registradora. La cajera debe procesar la compra cliente a cliente, donde
primero le cobra al cliente 1, luego al cliente 2, y as sucesivamente.
Definiremos una clase Cajera y una clase Cliente el cual tendr un array
de enteros que representaran los productos que ha comprado y el tiempo que
la cajera tardar en pasar el producto por el escaner; es decir, que si tenemos
un array con [1,3,5] significar que el cliente ha comprado 3 productos y que la
cajera tardara en procesar el producto 1 1 segundo, el producto 2 3
segundos y el producto 3 en 5 segundos, con lo cual tardara en cobrar al
cliente toda su compra 9 segundos.
Parte 1
Clase Cliente
1. Cree una clase llamada Cliente, que tenga como atributos un String nombre
y un arreglo de enteros carroCompra.
2. Cree el constructor y los mtodos getter y setter de la clase Cliente
Clase Cajera
1. Cree una clase llamada Cajera, que tenga como atributo un String nombre
2. Cree el constructor y los mtodos getter y setrer de la clase Cajera.
3. Cree un mtodo llamado esperarXsegundos que reciba como parmetro un
int, este int representa los segundos de espera. Dentro del mtodo adicione
dormir el hilo la cantidad de segundos que le llegan por parmetros
multiplicado por 1000 (Thread.sleep(segundos * 1000);)
4. Cree un mtodo llamado procesarCompra que reciba como parmetros un
objeto Cliente y un objeto Long para pasarle el tiempo, puede ponerle de
nombre timeStamp. Dentro del mtodo adicione:
a. System.out.println("La cajera " + this.nombre + " COMIENZA A
PROCESAR LA COMPRA DEL CLIENTE " + cliente.getNombre() + " EN
EL TIEMPO: " + (System.currentTimeMillis() - timeStamp) / 1000 +
"seg");
b. Un for que recorra el carro de compras del cliente, dentro del for lo
primero que deben hacer es poner a esperar el tiempo que aparece
dentro del arreglo del carro de compras. Pista (ya creo un mtodo
llamado esperarXsegundos). Despus imprima por consola el
nmero del producto que est procesando y el tiempo en el que va
Pista(En las lnea anterior, la impresin, estn haciendo eso
mismo)
c. System.out.println("La cajera " + this.nombre + " HA TERMINADO DE
PROCESAR " + cliente.getNombre() + " EN EL TIEMPO: " +
(System.currentTimeMillis() - timeStamp) / 1000 + "seg");
Clase Supermercado

1. Cree una clase llamada Supermercado


2. Cree el mtodo main, que tenga:
a. Cree un objeto cliente de nombre Cliente 1 que tenga 6 productos, el
tiempo en que se procesa cada producto es 2, 2, 1, 5, 2, 3
b. Cree un objeto cliente de nombre Cliente 2 que tenga 5 productos, el
tiempo en que se procesa cada producto es 1, 3, 5, 1, 1
c. Cree un objeto cajera que se llame Cajera 1
d. Cree un objeto cajera que se llame Cajera 2
e. Vamos a poner un tiempo inicial de referencia, para esto adicione la
lnea long initialTime = System.currentTimeMillis();
f. Haga que la cajera 1 procese la compra del cliente 1
g. Haga que la cajera 2 procese la compra del cliente 2
Puede proceder a Compilar
El resultado debe ser algo asi:
La cajera Cajera 1 COMIENZA A PROCESAR LA COMPRA DEL
EN EL TIEMPO: 0seg
Procesado el producto 1 ->Tiempo: 2seg
Procesado el producto 2 ->Tiempo: 4seg
Procesado el producto 3 ->Tiempo: 5seg
Procesado el producto 4 ->Tiempo: 10seg
Procesado el producto 5 ->Tiempo: 12seg
Procesado el producto 6 ->Tiempo: 15seg
La cajera Cajera 1 HA TERMINADO DE PROCESAR Cliente
15seg
La cajera Cajera 2 COMIENZA A PROCESAR LA COMPRA DEL
EN EL TIEMPO: 15seg
Procesado el producto 1 ->Tiempo: 16seg
Procesado el producto 2 ->Tiempo: 19seg
Procesado el producto 3 ->Tiempo: 24seg
Procesado el producto 4 ->Tiempo: 25seg
Procesado el producto 5 ->Tiempo: 26seg
La cajera Cajera 2 HA TERMINADO DE PROCESAR Cliente
26seg

CLIENTE Cliente 1

1 EN EL TIEMPO:
CLIENTE Cliente 2

2 EN EL TIEMPO:

Conteste las siguientes preguntas


1. Que ocurri al poner Thread.sleep, sali algn error? Si fue as, como lo
soluciono?, Investigue por qu ocurre el error.
2. Que hace el mtodo System.currentTimeMillis()?
3. Que puede concluir, luego de compilar el paso 1? Se aprovech los hilos?
Parte 2
Cree una copia del proyecto.
Clase Cajera
1. Modifique la clase Cajera para que extienda de Thread
2. Agregue como atributo de la clase un objeto de tipo Cliente
3. Agregue como atributo de la clase un long llamado tiempoInicial
4. Modifique el constructor, adicione getter y setter necesarios

5. Cambie el nombre del mtodo procesarCompra por run y que ya no tenga


parmetros
6. Encima de este mtodo (run) ponga la clusula para sobreescribir.
7. Realice los ajustes necesarios en el mtodo para que no genere errores.
Clase Supermercado
1. Ajuste la creacin de los objetos cajera, para que reciba todos los
parmetros esperados
2. Ya no llame el mtodo procesarCompra, si no que ejecute las cajas con el
mtodo start.
Compile todo
Conteste las siguientes preguntas
1. Por qu se cambi el nombre del mtodo procesarCompra por run?
2. Por qu debemos poner la clusula de sobreescribir encima del mtodo
run?
3. Como fue esta vez los resultados? Que diferencia existe con la parte 1?
Parte 3
Haga el mismo ejercicio pero no extendiendo si no implementando
Runnable, para esto, copie el proyecto de la parte 1 en un nuevo
proyecto.
Clase Supermercado
1. Haga que la clase supermercado implemente la clase Runnable.
2. Adicione 3 atributos a la clase supermercado uno de tipo Cliente, uno de
tipo Cajera y uno de tipo long para el tiempo inicial.
3. Cree el constructor de la clase supermercado.
4. Adicione el mtodo run (Recuerde la clusula de sobreescribir). En este
mtodo llame el mtodo procesarCompra de la cajera y enve los
parmetros necesarios.
5. Modifique el mtodo main asi:
a. Luego de la lnea donde declaramos un long initialTime, agregue 2
objetos Runnable, cada uno inicializado con supermercado,
envindole los objetos cliente y cajera y el initialTime
b. Luego ponga a correr los hilos, para esto adicione new
Thread(proceso1).start();, haga , donde proceso1, es el nombre de
uno de los objetos Runnable que creamos previamente, lo mismo
para el otro hilo.
Compile todo.
Conteste las siguientes preguntas
1. Como fueron los resultados esta vez?
2. Qu diferencia hay entre la forma usada en la parte 3 con las otras
formas implementadas?.

You might also like