Advertisement
Joaquin_Hidalgo

Punto2

Oct 10th, 2024
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.37 KB | None | 0 0
  1. package punto2;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Random;
  5. import java.util.concurrent.Semaphore;
  6.  
  7. public class Punto2 implements Runnable {
  8.     private Auto auto;
  9.     private final Semaphore semaforo;
  10.     private static HashMap<Integer, Boolean> cuadrantes = new HashMap<>();
  11.  
  12.     public Punto2(Auto auto, Semaphore semaforo) {
  13.         this.auto = auto;
  14.         this.semaforo = semaforo;
  15.     }
  16.  
  17.     public static void main(String[] args) {
  18.         cuadrantes.put(1, true);
  19.         cuadrantes.put(2, true);
  20.         cuadrantes.put(3, true);
  21.         cuadrantes.put(4, true);
  22.  
  23.         Semaphore semaforo = new Semaphore(2);
  24.         Auto[] autos = new Auto[4];
  25.         autos[0] = new Auto('N', 1, 2);
  26.         autos[2] = new Auto('S', 3, 4);
  27.  
  28.         autos[1] = new Auto('E', 4, 1);
  29.         autos[3] = new Auto('O', 2, 3);
  30.  
  31.         for (int i = 0; i < 4; i++) {
  32.             Thread hiloAuto = new Thread(new Punto2(autos[i], semaforo));
  33.             hiloAuto.start();
  34.         }
  35.     }
  36.  
  37.     @Override
  38.     public void run() {
  39.         boolean aux = true;
  40.         do {
  41.             aux = pasar();
  42.             if (aux) {
  43.                 try {
  44.                     System.out.println("No se puede pasar hacia " + auto.getDireccion() + " esperando ...");
  45.                     Thread.sleep(100);
  46.                 } catch (InterruptedException e) {
  47.                     e.printStackTrace();
  48.                 }
  49.             }
  50.         } while (aux);
  51.     }
  52.  
  53.     public boolean pasar() {
  54.         boolean aux = true;
  55.         try {
  56.             semaforo.acquire();
  57.             if (puedePasar()) {
  58.                 Random r = new Random();
  59.                 int tiempo = r.nextInt(2001) + 3000;
  60.  
  61.                 System.out.println("Esta cruzando " + auto.getDireccion());
  62.                 Thread.sleep(tiempo);
  63.                 System.out.println("Ya termino de cruzar el auto que se dirigia al " + auto.getDireccion());
  64.                 liberarCuadrante();
  65.                 aux = false;
  66.             }
  67.         } catch (InterruptedException e) {
  68.             e.printStackTrace();
  69.         }
  70.         semaforo.release();
  71.         return aux;
  72.     }
  73.  
  74.     public synchronized boolean puedePasar() {
  75.         if (cuadrantes.get(auto.getC1()) && cuadrantes.get(auto.getC2())) {
  76.             cuadrantes.put(auto.getC1(), false);
  77.             cuadrantes.put(auto.getC2(), false);
  78.             System.out.println(auto.getDireccion() + " se ocupa cuadrantes -> " + auto.getC1() + " : " + auto.getC2());
  79.             return true;
  80.         } else {
  81.             return false;
  82.         }
  83.     }
  84.  
  85.     public synchronized void liberarCuadrante() {
  86.         cuadrantes.put(auto.getC1(), true);
  87.         cuadrantes.put(auto.getC2(), true);
  88.     }
  89.  
  90. //  public synchronized void mostrarCuadrantes() {
  91. //      cuadrantes.forEach((cuadrante, estado) -> System.out.print(cuadrante + " :" + estado + " , "));
  92. //  }
  93.  
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement