Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.56 KB | None | 0 0
  1. package Principal;
  2.  
  3. import java.util.concurrent.locks.Condition;
  4. import java.util.concurrent.locks.ReentrantLock;
  5.  
  6. /*
  7.  * To change this license header, choose License Headers in Project Properties.
  8.  * To change this template file, choose Tools | Templates
  9.  * and open the template in the editor.
  10.  */
  11. /**
  12.  * Clientes de Viajes, prioritarios para Empleado A
  13.  *
  14.  * @author victo
  15.  */
  16. public class Agencia {
  17.  
  18.     int empleadoA;      //Asginacion de cliente a empleadoA (prioridad viajes)
  19.     int empleadoB;      //Asignacion de cliente a empleadoB
  20.     int esperaViaje;    //Numero de personas esperando en la cola para viajes
  21.     ReentrantLock mutex;
  22.     Condition cola;
  23.     Condition colaViaje;
  24.     // int esperaEntradas; //Numero de personas esperando en la cola para entradas
  25.     Condition colaEntradas;
  26.     CanvasA canvas;
  27.  
  28.     public Agencia(CanvasA c) {
  29.         mutex = new ReentrantLock();
  30.         this.colaEntradas = mutex.newCondition();
  31.         this.colaViaje = mutex.newCondition();
  32.         this.cola = mutex.newCondition();
  33.         empleadoA = empleadoB = -1;
  34.         esperaViaje = 0;
  35.         this.canvas=c;
  36.     }
  37.  
  38.     public void EntraViaje(int id) throws InterruptedException {
  39.         mutex.lock();
  40.         try {
  41.  
  42.             while (empleadoA != -1 && empleadoB != -1) //Si estan los dos empleados ocupados, espera
  43.             {
  44.                 esperaViaje++;
  45.                 System.out.println("CLIENTE VIAJE: " + id + " ESPERA...");
  46.                 cola.await();
  47.                 esperaViaje--;
  48.             }
  49.  
  50.             if (empleadoA == -1) //Si el A está libre, se le asigna
  51.             {
  52.                 System.out.println("CLIENTE VIAJE: " + id + " ATENDIDO POR EMPLEADO-A");
  53.                 empleadoA = id;
  54.                 canvas.asigna('A',"VIAJE-"+id);
  55.                 // AVISA CANVAS PINTAR
  56.             } else {
  57.                 System.out.println("CLIENTE VIAJE: " + id + " ATENDIDO POR EMPLEADO-B");
  58.                 empleadoB = id;
  59.                 canvas.asigna('B',"VIAJE-"+id);
  60.                 //AVISA CANVAS
  61.             }
  62.             System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
  63.         } finally {
  64.             mutex.unlock();
  65.         }
  66.     }
  67.  
  68.     public void SaleViaje(int id) {
  69.         mutex.lock();
  70.         try {
  71.             if (empleadoA == id) {
  72.                 empleadoA = -1; //Liberamos el empleado
  73.                 canvas.asigna('A'," ");
  74.             } else {
  75.                 empleadoB = -1;
  76.                 canvas.asigna('B'," ");
  77.             }
  78.             System.out.println("CLIENTE VIAJE: " + id + " SALE");
  79.  
  80.             System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
  81.             //Avisa canvas
  82.                            
  83.             cola.signal();
  84.  
  85.         } finally {
  86.             mutex.unlock();
  87.         }
  88.     }
  89.  
  90.     public void EntraEntradas(int id) throws InterruptedException {
  91.         mutex.lock();
  92.         try {
  93.             while ((empleadoB != -1 && empleadoA != -1) || (empleadoA == -1 && esperaViaje > 0)) //Si estan los dos empleados ocupados o el A libre, pero con gente Viaje esperando
  94.             {
  95.                 System.out.println("CLIENTE ENTRADAS: " + id + " ESPERA...");
  96.                 cola.await();
  97.             }
  98.             if (empleadoA == -1) //Si el A está libre, se le asigna
  99.             {
  100.                 System.out.println("CLIENTE ENTRADAS: " + id + " ATENDIDO POR EMPLEADO-A");
  101.                 empleadoA = id;
  102.                 canvas.asigna('A',"ENTRADAS-"+id);
  103.                 // AVISA CANVAS PINTAR
  104.             } else {
  105.                 System.out.println("CLIENTE ENTRADAS: " + id + " ATENDIDO POR EMPLEADO-B");
  106.                 empleadoB = id;
  107.                 canvas.asigna('B',"ENTRADAS-"+id);
  108.                 //AVISA CANVAS
  109.             }
  110.             System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
  111.         } finally {
  112.             mutex.unlock();
  113.         }
  114.     }
  115.  
  116.     public void SaleEntradas(int id) {
  117.         mutex.lock();
  118.         try {
  119.             if (empleadoA == id) {
  120.                 empleadoA = -1; //Liberamos el empleado
  121.                 canvas.asigna('A'," ");
  122.             } else {
  123.                 empleadoB = -1;
  124.                 canvas.asigna('B'," ");
  125.             }
  126.             System.out.println("CLIENTE ENTRADAS: " + id + " SALE");
  127.             cola.signal();
  128.             System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
  129.             //Avisa canvas
  130.         } finally {
  131.             mutex.unlock();
  132.         }
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement