import java.lang.*; import java.util.*; class Buffer { private int buf[]=new int [5]; private int in; private int out; Buffer () { in=0; out=0; } synchronized int get() { while(in==out) { try{wait();} catch(InterruptedException e) {} } int el=buf[out]; out=(out+1)%5; notify(); return el; } synchronized void put(int el) { while((in+1)%5==out) { try{wait();} catch(InterruptedException e) {} } buf[in]=el; in=(in+1)%5; notify(); } } class Cons extends Thread{ Buffer b; int id; Cons(Buffer p, int n) { this.b=p; id=n;} public void run() { while(true) { int el=b.get(); System.out.println("C" + id + " consumo: " + el); } } } class Prod extends Thread { Buffer b; Random r; Prod(Buffer p){ this.b=p; r=new Random(); } public void run(){ while (true) { int el=r.nextInt()%10; b.put(el); System.out.println("P-Ho prodotto: "+el); } } } class jsp10 { // Classe principale contentene il main static Buffer buf=new Buffer(); public static void main(String Arg[]) { Prod a=new Prod(buf); Cons b=new Cons(buf,0); Cons c=new Cons(buf,1); a.start(); b.start(); c.start(); } }