Sei sulla pagina 1di 3

Practica 1: Acceso sincronizado a datos compartidos

En esta prctica, agregara cdigo a una aplicacin existente. Deber determinar si el cdigo est
ejecutndose en un ambiente multihilo y si es as hacerlo seguro (thread-safe)

Tareas

1. Abrir el proyecto Synchronized como proyecto principal


2. Expande el directorio del proyecto
3. Crear la clase PurchasingAgent en el paquete com.example.
4. Completar la clase PurchasingAgent.
a. Agregar el mtodo purchase. El mtodo purchase() debera:
i. Obtener una referencia a un objeto de tipo Store. Debe notar que la clase Store
implementa el patrn de diseo Singleton.
ii. Comprar una camiseta (Shirt)
Verificar que la tienda tiene al menos una camiseta en el stock.
Utilice el objeto tienda para autorizar una compra con tarjeta crdito. Utilice una
tarjeta de crdito con nmero de cuenta igual a 1234 y una capacidad de compra
de 15.00. Debe retornar un resultado de tipo boolean.
Si hay camisetas en el stock y la tarjeta de crdito fue autorizada, entonces usted
debera tomar esa camiseta de la tienda.
Imprima la informacin de la camiseta y un mensaje indicando si fue adquirida o si
la operacin no tuvo xito.

5. Ejecute el proyecto varias veces. Note que la tienda contiene solo una camiseta. Puede ver
algunas variaciones en la prueba. Por ejemplo:
a. Dos mensajes de transaccin realizada y dos camisetas
b. Dos mensajes de transaccin realizada y una camiseta y otra con null

c. Dos mensajes de transaccin realizada y una camiseta y una excepcin

d. Un mensaje de transaccin realizada, una camiseta y un mensaje de transaccin fallida.

6. Ahora utilizaremos la clase PurchasingAgent


a. En la clase PurchasingAgent utilice el constructor y escriba una instruccin para
imprimir un mensaje que nos indique cuando un agente es creado.
b. Con el mtodo purchase utilice el mtodo Thread.currentThread() para
obtener una referencia al hilo que actualmente ejecuta el mtodo purchase().
Imprima el nombre y el id del hilo obtenido.

c. Ejecute el proyecto y observe la salida.


7. Abra la clase Store y agregue un retardo(delay) al mtodo authorizeCreditCard()

8. Ejecute el proyecto varias veces. Debera ver una excepcin de tipo


java.util.NoSuchElementException en el mtodo purchase. Esta excepcin se
genera al llamar el mtodo store.takeShirt
9. Utilice un bloque synchronized para crear un comportamiento predecible. Este bloque
debe colocarlo en el mtodo purchase de la clase purchasingAgent.

10. Ejecute el proyecto. Debera observar un comportamiento esperado. Debe observar un


mensaje de transaccin exitosa, una camiseta, y un mensaje de transaccin fallida.

Potrebbero piacerti anche