Newsgroup: it.comp.java
Titolo: Maledetti THREAD

Ciao a tutti,
sto studiando i thread ma non ho capito una mazza! Il problema sono io o
sono difficili i thread?
I miei riferimenti sono "Java" della McGraw-Hill e "Java mattone dopo
mattone" più qualche articolo su MokaByte però, ripeto, mi è difficile
comprenderli non come concetto ma nel linguaggio.
Potreste gentilmente darmi qualche utile riferimento?
Grazie mille!
pMB
www.proghettolab.it

 Potreste gentilmente darmi qualche utile riferimento?
E' difficile (specie all'inizio) "studiare qualcosa" senza sapere che ci si 
vuol fare.
Cosa vuoi fare, coi thread?
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

Devo interagire con un mondo in Vrml tramite l'EAI con una applet, per avere
in tempo reale qualsiasi tipo di informazione sugli oggetti (posizione, ecc.
ecc.) ed in futuro poter realizzare una comunità virtuale.
pMB
www.proghettolab.it

 wrote in
news:9Uww9.73330$
TD1.3...@news2.tin.it
: 

Questo e' troppo generico - si ferma a livello di analisi funzionale. I 
thread sono in generale un meccanismo implementativo, e quelli in Java sono 
una particolare interpretazione di quel meccanismo. :)
Quindi, in che modo pensi di usare i thread specificatamente _per 
realizzare_ quella cosa li'? Hai capito cosa e' un thread? Quali sono le 
operazioni di base?


Cosa è un thread l'ho capito, ma le operazioni di base proprio no!
pMB
www.proghettolab.it

 Cosa è un thread l'ho capito, ma le operazioni di base proprio no!
Se hai capito cos'è un Thread avrai capito che comunque tutto rimane
"simulato" (essendo il processore in grado di processare una sola riga di
codice per volta), le operazioni associate quindi ai thread sono
sostanzialmente quelle che permetteno di agire sul loro stato e simulare
così l'esecuzione contemporanea degli stessi (wait() notify() ecc. ecc.)
inoltre ci si avvale di metodi sincornizzati per la gestione dell'accesso ai
dati. Come ogni buon corso di programmazione concorrente fa vedere:
T1        T2
run();    run();
i=i+1;    i=1-1;
stop ;    stop();
Se all'inizio la variabile i vale 0, quanto vale alla fine dell'esecuzione
dei dcue thread?
Insomma io problemi più comuni sono i Thread, i metodi associati sono quindi
tutti relativi alla gestione e alla soluzione di questi ultimi ...
Non è certo una spiegazione esauriente, ma spero che nel suo piccolo ti
possa aiutare.
Un buon libro sui primi passi sulla programmazione concorrente:
Java Restaurant (Tisato) Apogeo
è stato anche il mio docente di Sistemi operativi, e almeno il corso era
molto chiaro ...
Ciao, Grava

 Cosa è un thread l'ho capito, ma le operazioni di base proprio no!
Un thread viene creato; parte; termina. Nel mentre, puo': andare a dormire 
(e poi svegliarsi); mettersi in attesa su un certo oggetto; notificare ad 
un altro thread che e' in attesa su un certo oggetto che quell'oggetto e' 
libero.
Una volta partito, il suo flusso di controllo e' parallelo a quello del 
thread che l'ha creato - nel senso solito (informatico) di "parallelo".
Tutto qui.
Ancora, immagino tu abbia un'idea di _cosa_ vuoi parallelizzare... con un 
esempio concreto, sarebbe tutto piu' semplice. :)


Poichè le applicazioni che farò saranno orientate all'interazione tra Java
ed il VRML, l'operazione tipica che vorrei realizzare è la seguente:
Leggere la posizione (x,y,z) dell'utente nel mondo virtuale e trasferirla in
tempo reale sull'applet Java.
Così:
import java.awt.*;
import java.applet.*;
import vrml.external.*;
import vrml.external.field.*;
import vrml.external.exception.*;
public class coordinate extends Applet implements Runnable {
    Thread main;
    // variabili
    public void init() {
    // init variabili
    }
    public void start() {
        if (main == null) main = new Thread(this);
        main.start();
    }
    public void run() {
        while(main != null) {
            // leggi la posizione dell'utente e scrivila sull'applet
            repaint();
        }
    public void stop() {
        if (main != null) main.stop();
    }
    public void paint(Graphics g) {
        g.drawString(posizione, x, y);
    }
}
Per il momento l'unico risultato che ho ottenuto è una eccezione
NullPointerException, perchè?
Su alcuni codici ho notato che questa operazione può essere fatta anche
senza i Thread con la seguente istruzione:
    public void start() {
        while(true) {
            // fai qualcosa
        }
    }
Grazie ancora!
pMB
www.proghettolab.it

 trasferirla in tempo reale sull'applet Java.
Lasciamo perdere il codice per il momento, prima dobbiamo decidere 
esattamente cosa vogliamo fare :-)
Mi spiego: se tutto quel che vuoi fare e' quello qui sopra, non ti serve 
alcun thread: l'applet (come ogni programma) e' gia' associata ad un thread 
(quello "principale") che e' creato dalla JVM, e nel quale vengono eseguiti 
sia init() che start() (dai un'occhiata a 
http://groups.google.com/groups?hl=en&lr=&ie=UTF-
8&frame=right&th=7c9f4858435f4a96&seekm=Xns909989CB27014crsaduntinit%40193.
216.69.37#link5 per capire la differenza tra oggetto Thread e ..thread, se 
gia' non ce l'hai chiara). Quindi un'applet che nello start() abbia un 
ciclo che faccia il polling sul server della posizione dell'utente 
relativo, e invochi "repaint" fa gia' tutto quello che ti serve. Al 
massimo, dei Thread ti serve Thread.currentThread().sleep(x) per fare il 
polling ogni x millisecondi.
I thread ti servono se nell'applet vuoi fare piu' di una cosa 
contemporaneamente e indipendentemente. Ad esempio, leggere la posizione e 
ricevere input da tastiera e _scrivere_ sul server la nuova posizione. 
Eccetera. Cose cosi'.


OK, basta cosě!
Credo che dovrň ristudiare tutto l'argomento. Grazie di tutto. Se hai
bisogno di qualcosa (sono architetto) scrivimi senza problemi (sono in
debito) 
in...@proghettolab.it
.
A risentirci (spero di non annoiarti ancora con queste "semplici" domande ma
con altre piů interessanti).
pMB.
www.proghettolab.it