En esta práctica, agregara código a una aplicación existente. Deberá determinar si el código está ejecutándose en un ambiente multihilo y si es así hacerlo seguro (thread-safe)
Enviado por Rafa Ariza • 20 de Febrero de 2017 • Examen • 495 Palabras (2 Páginas) • 134 Visitas
Página 1 de 2
Practica 1: Acceso sincronizado a datos compartidos
En esta práctica, agregara código a una aplicación existente. Deberá determinar si el código está ejecutándose en un ambiente multihilo y si es así hacerlo seguro (thread-safe)
Tareas
- Abrir el proyecto Synchronized como proyecto principal
- Expande el directorio del proyecto
- Crear la clase PurchasingAgent en el paquete com.example.
- Completar la clase PurchasingAgent.
- Agregar el método purchase. El método purchase() debería:
- Obtener una referencia a un objeto de tipo Store. Debe notar que la clase Store implementa el patrón de diseño Singleton.
- 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 crédito. Utilice una tarjeta de crédito con número 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 crédito fue autorizada, entonces usted debería tomar esa camiseta de la tienda.
- Imprima la información de la camiseta y un mensaje indicando si fue adquirida o si la operación no tuvo éxito.
[pic 1]
- Ejecute el proyecto varias veces. Note que la tienda contiene solo una camiseta. Puede ver algunas variaciones en la prueba. Por ejemplo:
- Dos mensajes de transacción realizada y dos camisetas
[pic 2]
- Dos mensajes de transacción realizada y una camiseta y otra con null
[pic 3]
- Dos mensajes de transacción realizada y una camiseta y una excepción
[pic 4]
- Un mensaje de transacción realizada, una camiseta y un mensaje de transacción fallida.
[pic 5]
- Ahora utilizaremos la clase PurchasingAgent
- En la clase PurchasingAgent utilice el constructor y escriba una instrucción para imprimir un mensaje que nos indique cuando un agente es creado.
[pic 6]
- Con el método purchase utilice el método Thread.currentThread() para obtener una referencia al hilo que actualmente ejecuta el método purchase(). Imprima el nombre y el id del hilo obtenido.
[pic 7]
- Ejecute el proyecto y observe la salida.
- Abra la clase Store y agregue un retardo(delay) al método authorizeCreditCard()
[pic 8]
- Ejecute el proyecto varias veces. Debería ver una excepción de tipo java.util.NoSuchElementException en el método purchase. Esta excepción se genera al llamar el método store.takeShirt
- Utilice un bloque synchronized para crear un comportamiento predecible. Este bloque debe colocarlo en el método purchase de la clase purchasingAgent.
[pic 9]
- Ejecute el proyecto. Debería observar un comportamiento esperado. Debe observar un mensaje de transacción exitosa, una camiseta, y un mensaje de transacción fallida.
[pic 10]
...
Disponible sólo en Clubensayos.com