|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 2514
|
[JAVA] ricorsione nei thread
[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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
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 ??? Codice:
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();
}
}
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals Ultima modifica di anx721 : 18-09-2004 alle 01:55. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 2514
|
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.:-)
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 2514
|
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) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
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.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:09.



















