Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [java] PROBLEMA THREAD

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    910

    [java] PROBLEMA THREAD

    Salve a tutti!
    Ho creato 3 thread...che utilizzano una variabile globale....

    codice:
      public class Prova {
        int cont;
          public static void main(String[] a) {
          
    
    }
      }

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    910
    Mi è partito invio

    Salve a tutti!
    Ho creato 3 thread...che utilizzano una variabile globale....

    codice:
      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
    
          }
      }
    alla fine del lavoro di ogni thread la variabile viene incrementata cont = cont + 1
    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

  3. #3
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    910
    quindi come risolvo...come potrei incrementare una variabile soltando quando un thread finisce..

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    910
    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

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    910
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.