Está en la página 1de 8

LECTORES Y ESCRITORES (MONITORES)

public class Monitor { private int numdeLec; boolean escribiendo; public Monitor(){ numdeLec=0; escribiendo=false; } synchronized void leerBD(String numLec) { if(!escribiendo) { numdeLec++; System.out.println("Lector"+numLec+"empezando a leer"); } else try{ wait(); leerBD(numLec); }catch(Exception e){} } synchronized void escribirBD(String numEsc)

{ if(numdeLec==0) { System.out.println("Escritor"+numEsc+"empezando a escribir"); escribiendo=true; } else try{ wait(); escribirBD(numEsc); }catch(Exception e){} } synchronized public void terminaDeLeer(String numLec) { System.out.println("Lector"+numLec+"terminando de leer"); numdeLec--; if(numdeLec==0) notify(); } synchronized public void terminaDeEscribir(String numEsc) { System.out.println("Escritor"+numEsc+"terminando de escribir"); escribiendo=false; notify(); } } public class Lector extends Thread { Monitor monitor; public Lector(Monitor monitor, int i) { this.monitor=monitor; this.setName(""+i); } public void run(){ monitor.leerBD(getName()); try{ sleep(3000); }catch(Exception e){} monitor.terminaDeLeer(getName()); } } public class Lectores extends Thread { private Monitor monitor; public Lectores(Monitor monitor) { this.monitor=monitor; }

public void run() { int i=1; while (true) { Lector lector=new Lector(monitor,i); lector.start(); try{ sleep(3000); }catch(Exception e){} i++; } } }

public class Escritor extends Thread { Monitor monitor; public Escritor(Monitor monitor, int i) { this.monitor=monitor; this.setName(""+i); } public void run(){ monitor.escribirBD(getName()); try{ sleep(1000); }catch(Exception e){} monitor.terminaDeEscribir(getName()); } } public class Escritores extends Thread { private Monitor monitor; public Escritores(Monitor monitor) { int i=1; while(true) { Escritor escritor=new Escritor(monitor,i); escritor.start(); try{ sleep(1000); }catch (Exception e){} i++; } } }

public class Programa { public static void main(String[]args) { Monitor monitor=new Monitor(); Escritores escritores=new Escritores(monitor); Lectores lectores=new Lectores(monitor); lectores.start(); escritores.start(); } }

BARBERO DORMILON (MONITORES)

public class Monitor extends Thread { int numBarberosOcu; int numSillasOcu; public Monitor(int nunBarberosOcu, int numSillasOcu) { this.numBarberosOcu=numBarberosOcu; this.numSillasOcu=numSillasOcu; } synchronized public void empezarCorte(String numBarbero) { if(numSillasOcu==0) { System.out.println("Barbero"+numBarbero+"dormido"); try{ wait(); System.out.println("Barbero"+numBarbero+"despierto"); }catch(Exception e){} } System.out.println("Barbero"+numBarbero+"Empezando el corte"); numSillasOcu--; numBarberosOcu++;

if(numSillasOcu>0) notify(); } synchronized public void recibirCorte(String numCliente) { if(numSillasOcu<5) { numSillasOcu++; if(numBarberosOcu<6) notify(); try{ System.out.println("Cliente"+numCliente+"Esperando en la silla para ser atendido"); wait(); }catch(Exception e){} }else System.out.println("Cliente"+numCliente+"se fue"); } synchronized public void terminarCorte(String numBarbero) { numBarberosOcu--; } }

public class Barbero extends Thread { private Monitor monitor; public Barbero(Monitor monitor,String numBarbero) { this.monitor=monitor; this.setName(numBarbero); } public void run() { while(true){ monitor.empezarCorte(getName()); try{ sleep(100); }catch(Exception e){} monitor.terminarCorte(getName()); System.out.println("Barbero"+getName()+"termino de cortar"); } } }

public class Barbero extends Thread { private Monitor monitor; public Barbero(Monitor monitor,String numBarbero) {

this.monitor=monitor; this.setName(numBarbero); } public void run() { while(true){ monitor.empezarCorte(getName()); try{ sleep(100); }catch(Exception e){} monitor.terminarCorte(getName()); System.out.println("Barbero"+getName()+"termino de cortar"); } } }

public class Cliente extends Thread { private Monitor monitor; public Cliente(Monitor monitor,int numCliente){ this.monitor=monitor; this.setName(""+numCliente); } public void run() { monitor.recibirCorte(this.getName()); } }

public class Clientes extends Thread { Monitor monitor; public Clientes(Monitor monitor){ this.monitor=monitor; } public void run(){ int i=1; while(true){ try{ sleep(100); }catch(Exception e){} Cliente cliente=new Cliente(monitor,i); cliente.start(); i++; } } }

public class Programa { public static void main(String[]args) { Monitor monitor=new Monitor(0,0); Barbero barbero1=new Barbero(monitor,"1"); Barbero barbero2=new Barbero(monitor,"2"); Barbero barbero3=new Barbero(monitor,"3"); Barbero barbero4=new Barbero(monitor,"4"); Clientes clientes=new Clientes(monitor); clientes.start(); barbero1.start(); barbero2.start(); barbero3.start(); barbero4.start(); } }

También podría gustarte