Salve dato l'esempio inventato che esprime un mio dubbio,mi potreste aiutare a impostare il programma in modo che:
dati dei thread ricercatori che esaminano una risorsa (array) brioss ,vorrei che trovata la stringa " kinder " e ritornando true ,avviassero i thread prelevatori (dal main)...Non saprei come correggere il codice per fare cio

codice:
public class Ricercatore extends Thread{
	private Brioss brioss;
	private int inizio;
	private int fine;
	
	public Ricercatore(Brioss b,int in,int fin) {
       brioss=b; 
        inizio=in;
        fine=fin;
	}	
	
	public void run(){
      
		try {
			sleep(1000);
			brioss.ricercaKinder(inizio, fine);
		
		} catch (InterruptedException e){
			e.printStackTrace();
		}
	}	
}


public class Prelevatore extends Thread{
	
	private Brioss brioss;
	private int inizio;
	private int fine;
	
	public Prelevatore(Brioss b,int in,int fin) {
	       brioss=b; 
	        inizio=in;
	        fine=fin;
		}	
	
	public void run(){
	      
		try {
			sleep(4000);
			brioss.prelevaKinder(inizio, fine);
		
		} catch (InterruptedException e){
			e.printStackTrace();
		}
	}
}

public class Brioss {

	   String brioss[]= new String[8];
	     private Lock lock= new ReentrantLock();
	   
    public Brioss() {
		for(int i=0 ; i< brioss.length ;i++){        	
			brioss[0]="cereali";
			brioss[1]="cereali";
			brioss[2]="cereali";
			brioss[3]="cereali";
			brioss[4]="cereali";
			brioss[5]="cereali";
			brioss[6]="kinder";
			brioss[7]="cereali";
		}
	}
	
    public String[] getBrioss() {
		return brioss;
	}
    
    public boolean ricercaKinder(int inizio,int fine){
    	 lock.lock();  
 	        try{
 	                   while(inizio<fine){
 			    		  if( brioss[inizio]== "kinder"){
 			    	   	     System.out.println("SONO UN THREAD RICERCATORE-->>> E C'E' UNA KINDER !!!!!!!");
 			    			   return true;
 			    		  }
 			    	     inizio++;
 	                   }
 	                   
 	        }catch(Exception e){  } 
 		       finally{
 		          lock.unlock();
 		       }	
    	return false;
    }

    public void prelevaKinder(int inizio,int fine){
    	lock.lock();  
	        try{
	                   while(inizio<fine){
			    		  if( brioss[inizio]== "kinder"){
                             brioss[inizio]="O";
			    		  }
			    	     inizio++;
	                   }
	                   
	        }catch(Exception e){  } 
		       finally{
		          lock.unlock();
		       }	
    }
}


   
public class MainBrioss {
	static    Brioss B= new Brioss();
	
	    public   boolean AvviaRicercatori(){

			int k=4;
			int inizio= 0;
			int dim = B.getBrioss().length;
			int incr= dim/4;
			int fine= incr;
			Ricercatore   ricercatori[] = new Ricercatore[k];
			
			for(int j=0 ; j<ricercatori.length ; j++){
		  	    ricercatori[j]= new Ricercatore(B,inizio, fine);
			      ricercatori[j].start();
				   inizio=fine;
	  			     fine= fine+incr;
			}   
		/////????????????????????????
		   
	   }
	   
	  public  void AvviaPrelevatori(){
		   int k=4;
			int inizio= 0;
			int dim = B.getBrioss().length;
			int incr= dim/4;
			int fine= incr;
			Prelevatore   prelevatori[] = new Prelevatore[k];
			
			for(int j=0 ; j<prelevatori.length ; j++){
		  	    prelevatori[j]= new Prelevatore(B,inizio, fine);
			      prelevatori[j].start();
				   inizio=fine;
	  			     fine= fine+incr;
			}
	   }
	  	   
	   public static void main(String[] args) {
		MainBrioss mb= new MainBrioss();
		
		if(mb.AvviaRicercatori())
			mb.AvviaPrelevatori();

	}

}