CCCPaste

7bb9f9579d209

public class ConsumidorCliente extends Thread{
	private ArrayList  mostrador;
	private int numCliente;
	private Random random;

	public ConsumidorCliente(ArrayList  mostrador,int numCliente) {
		this.mostrador=mostrador;
		this.numCliente=numCliente;
		this.random=new Random();
	}
	
	
	public void run() {
		
			try {
				int timeConsumition=random.nextInt(400-200)+200;
				System.out.println("El cliente("+this.numCliente+") está comprando");
				 boolean waitBizcocho = false;
				 boolean waitFactura = false;
				 Bizcocho b = null;
			     Factura f = null;
			     
				synchronized(mostrador) {
		        
					while(true) {
						if(mostrador.isEmpty()) {
							System.out.println("El mostrador está vacío");
							System.out.println("El cliente("+this.numCliente+") debe esperar");
							mostrador.wait();
						}
						else {
						for (Object e : mostrador) {
				            if (e instanceof Bizcocho && b == null) { 
				            	
				            	b = (Bizcocho) e;
				            	}
				            if (e instanceof Factura && f == null) {
				            	f = (Factura) e;
				            	}
				        }
						
						
						 if (b != null && f != null) break;
						
						if (b == null && !waitBizcocho) {
				            System.out.println("El cliente(" + numCliente + ") debe esperar por un bizcocho");
				            waitBizcocho = true;
				        }
						
						
				        if (f == null && !waitFactura) {
				            System.out.println("El cliente(" + numCliente + ") debe esperar por una factura");
				            waitFactura = true;
				        } 
				    
				        mostrador.wait();
					}
				}
					
					
					 Thread.sleep(timeConsumition);
					 mostrador.remove(b);
					 mostrador.remove(f);
					
					 System.out.println("El cliente(" + numCliente + ") ha tomado el bizcocho(" + b.getNumBizcocho() + ", " + b.getTipoBizcocho() + ")");
					 System.out.println("El cliente(" + numCliente + ") ha tomado la factura(" + f.getNumFactura() + ", " + f.getTipoFactura() + ")");
					 System.out.println("El cliente(" + numCliente + ") se retiró del local.");
								
				}
							
			}
			
			
		
			catch (InterruptedException e) {
				e.printStackTrace();
			}			
		
		
	}
	
}