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????
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????
allora per passarle invochi la tua classe che estente thread con parametri nel costruttore..
ad esempio
codice:ThreadOrdini t = new ThreadOrdini(connessioneServerFtp); t.start();per il ritorno dei dati nvece credo ti manchi un concetto..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(); } }
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ò
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();}}
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).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 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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
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 lentezzacodice: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"); } } } } } } } }
Cioè fammi capire .... 2800 e rotti (11*256) thread??? Ma scherzi??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.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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?
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.Originariamente inviato da terso88
codice:class determinamioip extends Thread implements Runnable{
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.
bha sinceramente non riesco a capirci una mazza di questi thread
perchè no ? impengni troppe risorse ?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 ....
io ho fatto un lavoro del genere !!!
odio chi parla di politica..
anzi vorrei fondare un partito contro tutto ciò