Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Principal;
- import java.util.concurrent.locks.Condition;
- import java.util.concurrent.locks.ReentrantLock;
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- /**
- * Clientes de Viajes, prioritarios para Empleado A
- *
- * @author victo
- */
- public class Agencia {
- int empleadoA; //Asginacion de cliente a empleadoA (prioridad viajes)
- int empleadoB; //Asignacion de cliente a empleadoB
- int esperaViaje; //Numero de personas esperando en la cola para viajes
- ReentrantLock mutex;
- Condition cola;
- Condition colaViaje;
- // int esperaEntradas; //Numero de personas esperando en la cola para entradas
- Condition colaEntradas;
- public Agencia() {
- mutex = new ReentrantLock();
- this.colaEntradas = mutex.newCondition();
- this.colaViaje = mutex.newCondition();
- this.cola = mutex.newCondition();
- empleadoA = empleadoB = -1;
- esperaViaje = 0;
- }
- public void EntraViaje(int id) throws InterruptedException {
- mutex.lock();
- try {
- while (empleadoA != -1 && empleadoB != -1) //Si estan los dos empleados ocupados, espera
- {
- esperaViaje++;
- System.out.println("CLIENTE VIAJE: " + id + " ESPERA...");
- cola.await();
- esperaViaje--;
- }
- if (empleadoA == -1) //Si el A está libre, se le asigna
- {
- System.out.println("CLIENTE VIAJE: " + id + " ATENDIDO POR EMPLEADO-A");
- empleadoA = id;
- // AVISA CANVAS PINTAR
- } else {
- System.out.println("CLIENTE VIAJE: " + id + " ATENDIDO POR EMPLEADO-B");
- empleadoB = id;
- //AVISA CANVAS
- }
- System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
- } finally {
- mutex.unlock();
- }
- }
- public void SaleViaje(int id) {
- mutex.lock();
- try {
- if (empleadoA == id) {
- empleadoA = -1; //Liberamos el empleado
- } else {
- empleadoB = -1;
- }
- System.out.println("CLIENTE VIAJE: " + id + " SALE");
- System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
- //Avisa canvas
- cola.signal();
- } finally {
- mutex.unlock();
- }
- }
- public void EntraEntradas(int id) throws InterruptedException {
- mutex.lock();
- try {
- while ((empleadoB != -1 && empleadoA != -1) || (empleadoA == -1 && esperaViaje > 0)) //Si estan los dos empleados ocupados o el A libre, pero con gente Viaje esperando
- {
- System.out.println("CLIENTE ENTRADAS: " + id + " ESPERA...");
- cola.await();
- }
- if (empleadoA == -1) //Si el A está libre, se le asigna
- {
- System.out.println("CLIENTE ENTRADAS: " + id + " ATENDIDO POR EMPLEADO-A");
- empleadoA = id;
- // AVISA CANVAS PINTAR
- } else {
- System.out.println("CLIENTE ENTRADAS: " + id + " ATENDIDO POR EMPLEADO-B");
- empleadoB = id;
- //AVISA CANVAS
- }
- System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
- } finally {
- mutex.unlock();
- }
- }
- public void SaleEntradas(int id) {
- mutex.lock();
- try {
- if (empleadoA == id) {
- empleadoA = -1; //Liberamos el empleado
- } else {
- empleadoB = -1;
- }
- System.out.println("CLIENTE ENTRADAS: " + id + " SALE");
- cola.signal();
- System.out.println("EMPLEADO-A = " + empleadoA + " EMPLEADO-B = " + empleadoB);
- //Avisa canvas
- } finally {
- mutex.unlock();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement