Newsgroup: it.comp.java
Titolo: AIUTO!! Come si usano i Thread?

Buongiorno,
ho appena iniziato a programmare in Java, e non conosco ancora
abbastanza bene i Thread da risolvere questo problema:
In un applet c'è un bottone che, premuto, scatena un metodo con
un Loop. Rilasciato, fa fermare il Loop.
Ho fatto una classe a parte come "implements MouseListener"
contenente i metodi "mousePressed" e "mouseReleased" ed ho
dichiarato 2 Thread: il primo, con priority=MAX, è quello
corrente, mentre il secondo, priority=MIN, è un metodo
differente.
Pensavo di far eseguire il metodo "mousePressed" sul Thread con
priority=MIN, in modo che potesse essere bloccato dal Thread con
priority=MAX in cui viene eseguito il metodo "mouseReleased".
E' sbagliato?
Come posso far eseguire i metodi nei rispettivi Thread?
Se qualcuno può darmi risposta, per cortesia me lo dica!
Grazie in anticipo e buona giornata!
Federico De Angelis
dean...@tera-it.com
* Sent from RemarQ 
http://www.remarq.com
 The Internet's Discussion Network *
The fastest and easiest way to search and participate in Usenet - Free!

 dichiarato 2 Thread
E' sufficiente solo un thread (quello del loop). Nel metodo
'mousePressed' crei il thread e lo fai partire con il metodo start(),
nel metodo 'mouseReleased' fermi il thread con il metodo stop().
Se non hai capito come fare, ti posso mandare un esempio.
Quando sarai riuscito a far funzionare questo, puoi passare a
migliorarlo. Infatti, come ti accorgerai, il metodo stop() e'
deprecato e non bisognerebbe piu' usarlo. Quindi sarebbe opportuno
inserire una variabile booleana nel loop, che controlli se il pulsante
e' stato rilasciato e di conseguenza interrompa il thread
(dall'interno del thread stesso).
--
Ciao. Leonardo 
bos...@uno.it
 
www.uno.it/utenti/tetractys

Ciao Leonardo,
ho letto tra i commenti del file policy che, appunto , Thread.stop() è stato
deprecato perchè non è Thread safe- mi sembra strano che un metodo
per stoppare un Thread venga deprecato x questo motivo...sai darmi
qualche chiarimento?
Grazie
Francesco
chec...@libero.it

qualche chiarimento?
"Stoppare" un thread causava principalmente problemi nel rilascio di
locks in mezzo a regioni critiche (cioe', quelle che sono in blocchi
"synchronized") e devono essere eseguite come passo atomico (cioe' senza
che un secondo thread possa "entrare" nella regione quando un primo sta
gia' eseguendo il suo codice). 
La semantica di questi blocchi e' chiara, ed e' appunto quella sopra;
tuttavia, eseguendo uno stop() su un thread che sta eseguendo una regione
critica libera il lock relativo, e la regione puo' rimanere in uno stato
inconsistente, in contrasto appunto con la semantica di cui sopra. Quindi
stop() violava (tra l'altro in modo non facilmente tracciabile) la
semantica delle regioni critiche. 
Btw, una regione critica e'... critica :) proprio perche' - se non si
eseguono le sue istruzioni nella sequenza precisa in cui sono scritte
(evitando quindi l'interferenza di altri thread) si hanno problemi di
inconsistenza o di comportamento non corretto. 
Maggiori dettagli a:
http://java.sun.com/products/jdk/1.2/docs/guide/misc/threadPrimitiveDeprec
ation.html 
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun