Ho il classico problema Produttore-Consumatore con Buffer con una variante;
Dovrei modificare la classe Buffer che riporto:
public class Buffer<T>{
int n;
T[] buffer;
int in=0,out=0,count=0;
public Buffer(int n){
this.n=n;buffer=new T[n];
}
public synchronized T get(){
while(count==0)
try{wait();}catch(InterruptedException e){}
T risp=buffer[out];out=(out+1)%n;count--;
notifyAll();
return risp;
}
public synchronized void put(T value){
while(count==n)
try{wait();}catch(InterruptedException e){}
buffer[in]=value;in=(in+1)%n;count++;
notifyAll();
}
}
La modifica da apportare utilizzando Timer e TimerTask è questa:
la get deve essere così:
public T get(long timeout) throws TimeoutException
Se la get riceve l'oggetto dal buffer entro il timeout OK altrimenti termina in modo anomalo
lanciando l'eccezione istanza di TimeoutException.
Qualcuno sà come si fà ?

Rispondi quotando

