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

Rispondi quotando