View Full Version : [JAVA] ricorsione nei thread
foxmolder5
17-09-2004, 19:17
[code]
public class ciao {
public void run() {
.....azione a ......
ciao nuovoThread = new ciao();
nuovoThread.start();
....... azione b .....
}
public static void main(String args[]){
ciao primoThread = new ciao();
primoThread.start();
}
}
vorrei fare in modo,come avviene nella ricorsione,prima vengano avviati tutti i thread, e quindi che vengano seguite tutte le "azione a" e quindi quando l'ultimo avrà fatto l'"azione a" e quindi quella "b" a scalare terminino tutti i thread dipendenti.ho usato il metodo yield() ma il risultato non è quello voluto.sapete aiutarmi?
Non ho capaito bene quello che vuoi fare...cioè vuoi che un thread attenda la terminazione del thread 'figlio' che ha creato prima di procedere?
In questo caso puoi utilizzare il metodo isAlive() per sapere se un thread è terminato, e finchè il figlio non è terminato invochi yield. Tieni presente pero che non poi andare avanti a creare thread, se no non ne termina nessuno, quindi ad esempio devi imporre un limite massimo al numero di thread da creare, oltre il quale non si creano altri thread. Comunque i thread sono fatti per avere esecuzione concorrente, se tu vuoi che attendano...perche usare i thread ???
public class Test extends Thread {
//mantiene il numero di thread creati
private static int threads = 0;
//identificatore del thread
private int id;
public void run(){
id = threads;
threads++;
System.out.println("\nStart thread numero: " + id);
if(threads < 10){
Test nuovoThread = new Test();
nuovoThread.start();
//attendo finche il filgio non termina
while(nuovoThread.isAlive())
yield();
}
System.out.println("\nEnd thread numero: " + id);
}
public static void main(String args[]){
Test primoThread = new Test();
primoThread.start();
}
}
foxmolder5
18-09-2004, 07:56
diciamo che avevo quasi risolto con un join al posto dell'alice che mi permetteva di non far andare avanti l'esecuzione del thread padre per un tot di tempo così da permettere al thread figlio di finire.cmq grazie x il suggerimento.il metodo alive non lo conoscevo.ora vedo come funziona.:-)
foxmolder5
18-09-2004, 11:49
scusami,1 altra domanda:
ho una matrice
int[][] matrice ;
che però devo inizializzare con valori random.ogni riga avrà lunghezza variabile e quindi a priori non posso inizializzarla con dimensioni predefinite.vorrei fare un ciclo for che a seconda del num "a" che si ritrova inizializzi la riga secondo tale dimensione. una cosa simile:
[code]
for (int i=0;i<20;i++ ) {
a= ...... ;
matrice = new int[i][a];
}
[code][
il problema è che facendo così poi quando vado ad accedervi mi da un errore in esecuzione. (ArrayIndexOutOfBoundsException)
con
ogni volta crei una nuova matrice con i righe e a colonne.
Devi fare:
//creo un array di 20 array, per ora tutti null
matrice = new int[20][];
a= ...... ;
//creo la riga i-esima
matrice[i] = new int[a];
poi per accedere alle rihe della matrice oni volta devi controllare la lunghezza della riga perche l'hai generata casualmente e non sai quanto vale, se no avrai l'eccezione.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.