Actividad 11: Hebras y secciones sincronizadas

per Victor Carceler darrera modificació 2020-04-06T13:06:41+02:00

Modifique las clases realizadas en la actividad 10 para mejorar la simulación:

  1. Cada coche contará con las propiedades privadas int max_fuel, int fuel e int consumo. Representando la capacidad del depósito, la cantidad en el depósito y el combustible consumido por cada kilómetro recorrido. En el constructor de Coche será  posible dar valor a max_fuel y a consumo. Cualquier coche partirá con un depósito lleno. El método toString() informará de la cantidad de depósito disponible y el método run() manejará los nuevos datos (cada km recorrido actualiza la cantidad de fuel del depósito, y si no hay fuel el coche no incrementará la distancia recorrida)
  2. Ejecute de nuevo la simulación para comprobar que los coches se detienen al agotar su depósito
  3. Escriba la clase Gasolinera para permitir que los coches repuesten. La clase Gasolinera contará con el método público int getFuel(int n) que retornará el número de litros de combustible demandados, esta operación tardará en realizarse tantos segundos como litros se retornen. El código de dicho método estará protegido para evitar que varias hebras lo ejecuten simultáneamente.
  4. Modifique la clase Coche para que:
  • En el constructor se permita especificar el objeto Gasolinera que el coche utilizará para repostar
  • Cuando el coche agote su depósito utilizará la Gasolinera para repostar. El coche imprimirá un mensaje cuando intente repostar y otro al terminar la operación.
  • Ejecute la simulación comprobando dos escenarios diferentes:
    • Cada coche utiliza una instancia de Gasolinera diferente
    • Todos los coches utilizan la misma Gasolinera
  • A partir de Coche cree las clases (copiando Coche.java y modificando la copia) CocheA y CocheB. Las clases tendrán diferente política de abastecimiento:
    1. CocheA sólo intentará repostar cuando el depósito se agote. Además intentará repostar en una sóla operación (todo el depósito de golpe)
    2. CocheB intentará repostar 2L, y sólo 2L, cada vez que su depósito esté por debajo de la mitad
  • Simule una carrera con 3 coches de tipo A y 3 de tipo B. Los 6 coches deberán tener las mismas características (en cuanto a tiempo y capacidad de depósito). Qué tipo de coche, de media, es más rápido ?