Salve a tutti!
Ho creato 3 thread...che utilizzano una variabile globale....
codice:public class Prova { int cont; public static void main(String[] a) { } }
Salve a tutti!
Ho creato 3 thread...che utilizzano una variabile globale....
codice:public class Prova { int cont; public static void main(String[] a) { } }
Mi è partito invio
Salve a tutti!
Ho creato 3 thread...che utilizzano una variabile globale....
alla fine del lavoro di ogni thread la variabile viene incrementata cont = cont + 1codice:public class Prova { int cont; public static void main(String[] a) { cont = 0 faccio partire il primo thread cont = 1 faccio partire il secondo thread cont = 2 faccio partire il terzo thread } }
e a sua volta viene creato un nuovo thread..
Ho paura che quella variabile subisca un incrementodoppio pechè ad esempio se due thread finiscono nello stesso istante???
i due thread successivi lavoreranno con lo stesso valore di cont...e questo non è bello!
come potrei fare in modo di creare un thread alla volta, e non più di uno??
grazie
guarda che quando parte il thread, se è veramente un thread.. passa subito all'esecuzione dell'istruzione successiva (l'incremento del contatore).. questo perchè i thread sono eseguiti "in parallelo" al codice chiamante
quindi come risolvo...come potrei incrementare una variabile soltando quando un thread finisce..
ho risolto il problema..ora ne ho un altro..
Ho due classi...Metto una in wait...quando dall'altra classe faccio notify()...il programma mi rimane in un'attesa eterna...come mai??
Ho dichiarato tutte e due le funzioni (quella di wait) e quella di (notify) synchronized...
aiutatemi... grazie
Un po' di codice aiuterebbe a capire dove stà il problema...
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
hai ragione:
Questa è la prima classe chi creo
threadPadre tp = new threadPadre();
tp.start()
poi dentro questa classe creo la seconda classe(thread) scansione Sito
codice://------------------------ INIZIO THREAD PADRE -----------------------// class threadPadre extends Thread { public void run() { inizio(); } synchronized void inizio(){ for(;;) { scansioneSito t1 = new scansioneSito(); t1.start(); try { wait(); System.out.println("Dopo wait"); } catch (InterruptedException e) { System.out.println("DENTRO CATCH"); } System.out.println("cont = cont + 1"); cont = cont + 1; if (fine == true) { break; } System.out.println("Dopo if"); } } } //------------------------ FINE THREAD PADRE -----------------------// //------------------------- INIZIO SCANSIONE SITO -------------------// class scansioneSito extends Thread { String sito, codice; public void run() { inizio(); } synchronized void inizio(){ sito = (String) arrSiti.elementAt(cont); System.out.println("SITO: " + sito); codiceHtml ist = new codiceHtml(); codice = ist.trova(sito); if (codice == "-1") { System.out.println("ERRORE: Dentro classe thread, url non valido"); System.out.println("FINE THREAD STO PER INVIARE IL NOTIFY"); notify(); } else { // analizzaTesto at = new analizzaTesto(); // at.analizza(codice, ); } // for(;;) { // } System.out.println("FINE THREAD STO PER INVIARE IL NOTIFY"); notify(); } } //------------------------- FINE SCANSIONE SITO -------------------//
help