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();
}
}