Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: variabili nei thread

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213

    variabili nei thread

    ciao ragazzi. volevo chiedervi: se dichiaro delle variabili nella classe principale e poi creo delle classi thread come faccio a passare e a restituire le variabili dichiarate nella classe principale????

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    allora per passarle invochi la tua classe che estente thread con parametri nel costruttore..
    ad esempio

    codice:
    ThreadOrdini t = new ThreadOrdini(connessioneServerFtp);
    t.start();
    codice:
    public class ThreadOrdini extends Thread {
    
    	// COSTANTI
    	private ConnessioneServerFtp connessioneServerFtp = new ConnessioneServerFtp();
    
    	public ThreadOrdini(ConnessioneServerFtp connessioneServerFtp){
    		super();
    		this.connessioneServerFtp = connessioneServerFtp;
    	}
    	
    	public void run(){
    		OrdiniFtp ordini = new OrdiniFtp(connessioneServerFtp);
    		ordini.trasmissioneOrdineCompleta();
    		
    	}
    
    }
    per il ritorno dei dati nvece credo ti manchi un concetto..
    se tu passi un oggetto da una classe a ad una b, tutte le modifiche che fai a quell'oggetto nella classe b le ritrovi automaticamente anche nella classe A
    attenzione però.. solo se passi un oggetto diverso da primitivi o String.. o se non usi final all'interno dei metodi in cui lo definisci..
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    ti spiego brevemente.
    dopo aver calcolato il mio ip devo creare gli ip successivi e pingarli per vedere quali rispondono e quali no. il programma l'ho fatto ma ora devo farlo con i thread.

    io ho pensato a una cosa del genere

    codice:
    package javaapplication1;
    
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.lang.*;
    
    class determinamioip extends Thread implements Runnable{
        public byte[] getmioip(InetAddress indirizzo,byte []mioip)throws Exception{
            mioip=indirizzo.getLocalHost().getAddress();
            return mioip;
    
        }
    }
    
    public class connessione{
        public static void main(String []args)throws Exception{
    
            InetAddress indirizzo=null;
            byte[]mioip=new byte[4];
    
            determinamioip detmioip=new determinamioip();
            Thread t=new Thread(detmioip);
            t.start();}}

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da terso88
    dopo aver calcolato il mio ip devo creare gli ip successivi e pingarli per vedere quali rispondono e quali no. il programma l'ho fatto ma ora devo farlo con i thread.
    Se la questione è questa, allora la cosa più appropriata sarebbe l'uso di un "thread pool" (da Java 5, l'Executor Framework in java.util.concurrent).
    Se non puoi/vuoi usare (per qualunque motivo) l'Executor Framework di Java 5 .... beh, si può fare anche con Thread "crudi" creati direttamente da te ma .... devi farlo in modo moooooolto attento e accurato.

    Non vorrei che ad esempio ti metti a fare un bel grosso loop 'da indirizzo X a indirizzo Y' e per ogni indirizzo istanzi e lanci un nuovo thread .... no. Dovresti istanziare e gestire un numero limitato di thread (es. 10, 15 anche qualcosa di più visto che tanto sono più I/O bound che CPU bound) e fare in modo che ognuno, in ciclo, riceva in continuazione un nuovo indirizzo da verificare.
    La architettura di questa cosa comunque sarebbe da valutare molto bene ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    per quanto riguarda il numero di thread pensavo di fare una cosa del genere: un thread per ogni

    10.0.x.y dove 0<=x<=10 e y 0<=y<=255 in modo da ammortizzare la tempistica. solo che proprio non riesco a capire come si gestisce "la condivisione" di queste variabili. ti posto il codice senza thread così magari hai qualche consiglio in più da darmi

    codice:
    package javaapplication1;
    
    import java.io.*;
    import java.net.*;
    import java.lang.*;
    import java.util.*;
    import java.net.SocketException;
    import java.net.Socket;
    import java.net.SocketAddress;
    import java.net.BindException;
    
    
    public class connessione {
    
        public static void main(String[] args)throws Exception {
    
    
           InetAddress indirizzo=null;
           NetworkInterface rete=null;
           
    
    
           byte []mioip=new byte[4];
           int[] altroip=new int[4];
           short s;
           int i;
           int j;
           int k;
           boolean x;
           boolean y;
           String nome;
           Vector ipcherispondono= new Vector();
           Vector stampanti=new Vector();
    
    
           mioip=indirizzo.getLocalHost().getAddress();
           rete=NetworkInterface.getByInetAddress(indirizzo.getLocalHost());
           System.out.println(rete);
           List<InterfaceAddress> indirizzi = rete.getInterfaceAddresses();
           for (InterfaceAddress elem : indirizzi) {
               System.out.println(elem.toString());
               System.out.println(elem.getNetworkPrefixLength());
               s=elem.getNetworkPrefixLength();
               if(s==16){
                   altroip[0]=(int)mioip[0];
                   altroip[1]=(int)mioip[1];
                   for(i=0;i<256;i++){
                      for(j=0;j<256;j++){
                          altroip[2]=i;
                          altroip[3]=j;
                          mioip[0]=(byte)altroip[0];
                          mioip[1]=(byte)altroip[1];
                          mioip[2]=(byte)altroip[2];
                          mioip[3]=(byte)altroip[3];
                          x=indirizzo.getByAddress(mioip).isReachable(1000);
                          indirizzo=InetAddress.getByAddress(mioip);
                          if(x){
                              System.out.print("\n"+altroip[0]+"."+altroip[1]+"."+altroip[2]+"."+altroip[3]+" pinga");
                              ipcherispondono.add(indirizzo);
                              try{
                                Socket p=new Socket(indirizzo,8000);
                                y=p.isConnected();
                                if(y)
                                System.out.println(" è una stampante");
                                stampanti.addElement(indirizzo);
                              }
                              catch(Exception e){
                                  System.out.println(" la porta 8000 non è aperta");
                              }
    
                          }
                   }
               }
    
    
    }
    }
        }
    }
    naturalmente questo programma è funzionante, ma mi sono limitato a vederlo in funzione con una mask di 16 bit e quindi 65536 host e da 10.0.30.120 a 10.0.30.255 per ovvi motivi di lentezza

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da terso88
    un thread per ogni 10.0.x.y dove 0<=x<=10 e y 0<=y<=255 in modo da ammortizzare la tempistica.
    Cioè fammi capire .... 2800 e rotti (11*256) thread??? Ma scherzi??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    emh sinceramente non ho fatto ancorra il calcolo di quanti thread mi servirebbero. volevo fare un prova iniziale con 0-10 e 0-255 per vedere se funzionava. ehehhehe. adesso che vedo penso che 8 thread possano andare. però come farli?

  8. #8
    Originariamente inviato da terso88

    codice:
    class determinamioip extends Thread implements Runnable{
    Estendere Thread e implementare Runnable non ha senso. Thread implementa gia' runnable, quindi nell'estenderlo Runnable lo implementi gia'. Poi tra l'altro l'interfaccia runnable ha solo il metodo run, di cui tu farai l'overriding dopo aver esteso thread per far eseguire le operazioni che vuoi tu dal tuo thread, altrimenti il run semplicemente non fa nulla e ritorna.
    Implementando runnable invece devi implementare il metodo run. Quando poi crei il thread passando il tuo oggetto runnable il thread chiamera' nel suo metodo run il metodo run del runnable che gli hai passato.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    213
    bha sinceramente non riesco a capirci una mazza di questi thread

  10. #10
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    Originariamente inviato da andbin
    Non vorrei che ad esempio ti metti a fare un bel grosso loop 'da indirizzo X a indirizzo Y' e per ogni indirizzo istanzi e lanci un nuovo thread ....
    perchè no ? impengni troppe risorse ?
    io ho fatto un lavoro del genere !!!
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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 © 2025 vBulletin Solutions, Inc. All rights reserved.