PDA

Visualizza la versione completa : [JAVA] super.run()


Nunkij
11-07-2005, 20:52
Ho trovato questa istruzione in un esempio e volevo capire come stanno le cose. a cosa serve? ho letto che richiama dei metodi della superclasse. In che senso?

Se nel metodo run() metto un while (true) "frulla" all'infinito. Ottengo lo stesso risultato se uso super.run() senza il ciclo infinito? A me compilando sembra di s anzi ottengo una gestione migliore degli errori. Mi sapete dare delle informazioni pi precise?

ps: mi scuso x non aver cercato eventuali info su google ma sto navigando a 28 k :(((

Matteo982
11-07-2005, 21:11
Ma a quale superclasse ti riferisci?

anx721
11-07-2005, 21:19
con super.run() invochi l'esecuzione del metodo run che stato definito nella superclasse di quella corrente.

Il secondo qusito non l'ho capito...while (true) ti crea un ciclo infinito e non andrebbe usato..se vuoi mettere in pausa il thread corrente eistono metodi appositi per farlo in modo da non tenere inutilmente occupata la cpu.

Nunkij
11-07-2005, 21:22
ho letto cos su una guida. la classe che ha run() una extends Thread. Non so dirti altro.

Matteo982
11-07-2005, 21:28
mmm...non serve invocare il metodo run di un thread visto che ottieni lo stesso risultato di creando un oggetto della classe che estende la classe thread e poi utilizzando il metodo .start();

In effetti un ciclo infinito non ha molto senso, se vuoi mettere in pausa un thread esiste il metodo wait() che appunto blocca il thread che lo esegue. Per poi risvegliarlo devi usare un notifyAll().
Il tutto ovviamente in un try catch...su un esempio concreto forse pi semplice da capire...

Ciao. :ciauz:

Nunkij
11-07-2005, 22:17
il concetto questo. Volevo sapere se i due metodi sono equivalenti x un esempio che ho letto e volevo capirci ogni riga:


public void run(){

while (true){

... accetta connessioni e fai tutto quello che deve fare

}
}


public void run(){

... accetta connessioni e fai tutto quello che deve fare

super.run()

}

chiedevo xk nn capivo questa istruzione buttata l!

Matteo982
11-07-2005, 22:32
Nel primo caso il ciclo infinito per ovvi motivi del while...il secondo se non ho capito male anchesso un ciclo infinito (se mi sbaglio ditemelo) perch il metodo richiama ricorsivamente se stesso...presumo sia questo cmq penso che siano sostanzialmente la stessa cosa o cmq di solito io utilizzo il primo metodo cio un bel while e via... :master:

Ciao. :ciauz:

anx721
11-07-2005, 22:46
Originariamente inviato da Matteo982
Nel primo caso il ciclo infinito per ovvi motivi del while...il secondo se non ho capito male anchesso un ciclo infinito (se mi sbaglio ditemelo) perch il metodo richiama ricorsivamente se stesso...presumo sia questo cmq penso che siano sostanzialmente la stessa cosa o cmq di solito io utilizzo il primo metodo cio un bel while e via... :master:

Ciao. :ciauz:

Non ricorsivo perch non richiama se stesso ma richiama il metodo della superclasse...

Quanto a Nunkij non capisco quale sia il problema...super serve tra le atre cose a invocare metodi della superclasse aventi lo stesso nome e che altrimenti sarebbero "oscurati" da quelli della sottoclasse e non potrebbero essere riferiti. Nell'esempio il metodo run della sottoclasse semplicemente richiama quello della superclasse...non un esempio significativo, probabilmente staileggendo un tutorial sui thread in cui nel primo esempio il nuovo thread non fa nulla di particolare; negli esempi concreti ridefinisci il metodo run per fargli fare qualcosa

Matteo982
11-07-2005, 22:54
un mix di informazioni...cmq vero...tu ti ridefinisci il tuo metodo run poi crei un oggetto della tua classe e vai di metodo star()

Ciao. :ciauz:

Nunkij
11-07-2005, 23:10
quello che voglio capire che il metodo run che viene invocato quello della superclasse che estende thread giusto? quindi lo stesso che io ho ridefinito nella mia classe. E cio quello che alla fine chiama super.run().

ho capito bene?

Loading