Ciao gente, sto cercando di fare un piccolo programmino che fa delle simulazioni.
Il mio scopo è quello di avere un thread che legge ogni singola riga da un file testo e più thread che processano da quella riga letta.
Una riga contiene semplicemente un numero (1 o 2 o 3).
Sono quasi riuscito a produrre un codice funzionante, perchè funziona correttamente fino a 3 thread che processano.
Alzando invece il numero comincio a perdere il controllo dei thread: l'ordine si sballa e saltano la lettura di alcune righe.
Il mio problema principale è quello di riuscire a fare in modo che i thread una volta finito di processare, vadano in wait, però l'ultimo
deve anche avvisare che tutti i thread hanno finito di processare. Così con la chiamata si fa partire la lettura di un'altra riga
Ho copiato i pezzi più importanti della classe che fa da monitor
codice:// Scrivo il colore letto da file in un vettore e poi aspetto public synchronized void writeline(int iColor){ iThreadLogReading = iThreadLogWorking; for (int i = 0; i < iThreadLogWorking; i++){ vecStackColors.push(iColor); } notifyAll(); while (!vecStackColors.empty()){ try { wait(); } catch (InterruptedException e) { } } } // Leggo il colore e poi processo public synchronized int readline(){ while (vecStackColors.empty()){ try { wait(); } catch (InterruptedException e) { } } int iReturn = vecStackColors.lastElement(); return iReturn; } // Processato aspetto che tutti i thread abbiano processato // e poi notifico di leggere un'altra riga public synchronized void readlineEnd(){ vecStackColors.pop(); if (vecStackColors.empty()) { notifyAll(); } else { try { wait(); } catch (InterruptedException e) { } } try { wait(); } catch (InterruptedException e1) { } }

Rispondi quotando