Salve a tutti,
ho nel mio software una memoria condivisa rappresentata da un vector.
Più thread leggono e scrivono su questa struttura che è sincronizzata già di suo.
Voglio fare in modo che il thread lettore si blocca sulla casella finchè questa non contiene dati. Ho creato questa stupida classe:
Il problema persiste in quanto, nel momento in cui invoco la get su una casella(quest'ultima ancora non riempita) ho questa eccezione: java.lang.ArrayIndexOutOfBoundsException.public class buffer {
private Vector<File> shared;
public buffer(){
shared = new Vector();
}
public void add(File f){
synchronized(shared){
shared.add(f);System.out.print(shared.size()+"add" );
shared.notifyAll();
}
}
public File get(int index) throws InterruptedException{
synchronized(shared){System.out.print(shared.size( ));
while(shared.get(index)==null)
wait();
return shared.get(index);
}
}
Come posso risolvere il problema?

Rispondi quotando