Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Cliente implements Runnable {
- private Sala sala;
- private boolean peloCortado = false;
- //al ser la sala un recurso compartido, tengo que pasarsela por parametro
- public Cliente(Sala s) {
- this.sala=s;
- }
- @Override
- public void run() {
- //lo primero que tiene que hacer este thread es intentar entrar a la barberia
- boolean esperando = this.sala.entrar(this);
- //si pude entrar
- if (esperando) {
- //el thread va a leer una variable (peloCortado) que puede estar siendo escrita
- //por otro thread al mismo tiempo (barbero), por eso sincronizo sobre este monitor
- //para evitar race conditions
- synchronized(this) {
- while (!this.peloCortado) {
- //mientras no me corta el pelo, duermo sobre mi mismo monitor
- //despues me despierta el barbero cuando ya me lo corto
- this.wait();
- }
- }
- } else { //si no pude entrar
- System.out.println("Barberia llena");
- }
- }
- //EJECUTADO POR THREAD BARBERO, cuando termina de cortarle el pelo al cliente
- //va sincronizado porque el Thread Cliente lee peloCortado, y aqui Th Barbero la modifica
- public synchronized void setPeloCortado() {
- //lo despierta y el hilo del cliente muere
- this.peloCortado=true;
- this.notify();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement