Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.25 KB | None | 0 0
  1.  
  2. public class Cliente implements Runnable {
  3.     private Sala sala;
  4.     private boolean peloCortado = false;
  5.    
  6.     //al ser la sala un recurso compartido, tengo que pasarsela por parametro
  7.     public Cliente(Sala s) {
  8.         this.sala=s;
  9.     }
  10.    
  11.     @Override
  12.     public void run() {
  13.         //lo primero que tiene que hacer este thread es intentar entrar a la barberia
  14.         boolean esperando = this.sala.entrar(this);
  15.        
  16.         //si pude entrar
  17.         if (esperando) {
  18.             //el thread va a leer una variable (peloCortado) que puede estar siendo escrita
  19.             //por otro thread al mismo tiempo (barbero), por eso sincronizo sobre este monitor
  20.             //para evitar race conditions
  21.             synchronized(this) {
  22.                 while (!this.peloCortado) {
  23.                     //mientras no me corta el pelo, duermo sobre mi mismo monitor
  24.                     //despues me despierta el barbero cuando ya me lo corto
  25.                     this.wait();
  26.                 }
  27.             }
  28.         } else { //si no pude entrar
  29.             System.out.println("Barberia llena");
  30.         }
  31.     }
  32.    
  33.    
  34.     //EJECUTADO POR THREAD BARBERO, cuando termina de cortarle el pelo al cliente
  35.     //va sincronizado porque el Thread Cliente lee peloCortado, y aqui Th Barbero la modifica
  36.     public synchronized void setPeloCortado() {
  37.         //lo despierta y el hilo del cliente muere
  38.         this.peloCortado=true;
  39.         this.notify();
  40.     }
  41.    
  42.  
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement