Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package punto2;
- import java.util.HashMap;
- import java.util.Random;
- import java.util.concurrent.Semaphore;
- public class Punto2 implements Runnable {
- private Auto auto;
- private final Semaphore semaforo;
- private static HashMap<Integer, Boolean> cuadrantes = new HashMap<>();
- public Punto2(Auto auto, Semaphore semaforo) {
- this.auto = auto;
- this.semaforo = semaforo;
- }
- public static void main(String[] args) {
- cuadrantes.put(1, true);
- cuadrantes.put(2, true);
- cuadrantes.put(3, true);
- cuadrantes.put(4, true);
- Semaphore semaforo = new Semaphore(2);
- Auto[] autos = new Auto[4];
- autos[0] = new Auto('N', 1, 2);
- autos[2] = new Auto('S', 3, 4);
- autos[1] = new Auto('E', 4, 1);
- autos[3] = new Auto('O', 2, 3);
- for (int i = 0; i < 4; i++) {
- Thread hiloAuto = new Thread(new Punto2(autos[i], semaforo));
- hiloAuto.start();
- }
- }
- @Override
- public void run() {
- boolean aux = true;
- do {
- aux = pasar();
- if (aux) {
- try {
- System.out.println("No se puede pasar hacia " + auto.getDireccion() + " esperando ...");
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- } while (aux);
- }
- public boolean pasar() {
- boolean aux = true;
- try {
- semaforo.acquire();
- if (puedePasar()) {
- Random r = new Random();
- int tiempo = r.nextInt(2001) + 3000;
- System.out.println("Esta cruzando " + auto.getDireccion());
- Thread.sleep(tiempo);
- System.out.println("Ya termino de cruzar el auto que se dirigia al " + auto.getDireccion());
- liberarCuadrante();
- aux = false;
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- semaforo.release();
- return aux;
- }
- public synchronized boolean puedePasar() {
- if (cuadrantes.get(auto.getC1()) && cuadrantes.get(auto.getC2())) {
- cuadrantes.put(auto.getC1(), false);
- cuadrantes.put(auto.getC2(), false);
- System.out.println(auto.getDireccion() + " se ocupa cuadrantes -> " + auto.getC1() + " : " + auto.getC2());
- return true;
- } else {
- return false;
- }
- }
- public synchronized void liberarCuadrante() {
- cuadrantes.put(auto.getC1(), true);
- cuadrantes.put(auto.getC2(), true);
- }
- // public synchronized void mostrarCuadrantes() {
- // cuadrantes.forEach((cuadrante, estado) -> System.out.print(cuadrante + " :" + estado + " , "));
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement