Newsgroup: it.comp.java
Titolo: [?] uccidere un thread

Salve a tutti,
   qualcuno mi sa indicare un modo semplice per uccidere(far
terminare) un thread senza utilizzare la deprecated stop o la
unimplemented destroy.
La docu dice di dichiarare una var volatile e di settarla
opportunamente, testandone il valore nel metodo run del thread. Ma non
mi riesce di settare questa variabile di classe a partire dal nome del
thread.
Buone idee sono ben accette.
Grazie

 Grazie
prego ... ciao :)


Assolutamente no.
Non funziona nel modo che e' stato descritto.
Vedi la specifica corretta di interrupt in
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/Thread.html#interrupt()
Tentando di riassumere...
interrupt puo' generare tre tipi di eccezioni:
 - SecurityException 
 - InterruptedException
 - ClosedByInterruptException
oppure nessuna di queste e semplicemente settare un flag
leggibile con le chiamate ai metodi
 - isInterrupted()
 - interrupted()
Quindi, non consiglio in alcun modo di usare interrupt()
per risolvere il problema di terminare un thread.
Consiglio invece la "classica" soluzione descritta in:
file://localhost/D:/dario/Home/List/doc/java/jdk1.3/docs/guide/misc/threadPrimitiveDeprecation.html
-- Dario

 Non funziona nel modo che e' stato descritto.
:( ci sono rimasto male.....
interrupt() necessariamente genera un'InterruptedException,
non consideravo le altre eccezioni perchè mi limitavo a questo caso
specifico.
Comunque ti prego di spiegarmi come mai consigli così caldamente di non
utilizzare
questo approccio... io sinceramente non ho mai avuto alcun problema in tal
senso...
Ciao :)

 senso...
Ripeto (senza volerti "far star male"):
leggi le specifiche che ho citato nell'URL gia' dato:
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/Thread.html#interrupt()
Se il thread che tenti di interrompere con interrupt()
sta normalmente facendo il suo lavoro (cioe' non e' in nessuno dei casi
speciali indicati nelle specifiche stesse) allora *non* e' generata
una eccezione, bensi' viene solo settato un flag.
Tutti i programmi Java che usano i threads e che ho visto io
usano invece la tecnica descritta in:
http://java.sun.com/j2se/1.4.1/docs/guide/misc/threadPrimitiveDeprecation.html
Buona programmazione con i threads!
-- Dario
-- Dario

 
Mi sa che tu stai pensando ad un thread il cui run() contiene un ciclo che 
fa qualcosa, poi va a dormire per un po' con Thread.sleep(). Ma se nel 
corpo del thread Thread.sleep() non e' mai invocato, il semplice 
interrupt() non fa niente.
La tecnica "solita" prevede che il metodo di shutdown() setti appositamente 
la variabile che controlla il ciclo *e* invochi interrupt().
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 > Comunque ti prego di spiegarmi come mai consigli cos? caldamente di non


 la variabile che controlla il ciclo *e* invochi interrupt().
Abbiate pazienza ma non ho capito un gran che.
1) che interrupt interrrompa l'esecuzione del thread e che causi
un'eccezione se il thread č in wait č palese.
2) il metodo descritto nella java doc č abbastanza criptico e mal si adatta
a quel che devo fare.
In pratica ho una classe che implementa runnable
Nel run faccio diverse cosette tra cui la lettura da un socket
Avvio il thread dandogli un nome univoco.
Ad un certo punto in un'altra classe chiedo l'elenco dei thread attivi e
cerco quello che mi interessa.
Lo trovo ho un oggetto di tipo thread e non runnable e quindi non posso
invocarne i metodi.
Anche ad estendere la classe Thread non funzia.
Grazie

 
Riposto su google perchè la tin è banned :-(((((((
Abbiate pazienza ma non ho capito un gran che.
1) che interrupt interrrompa l'esecuzione del thread e che causi
un'eccezione se il thread è in wait è palese.
2) il metodo descritto nella java doc è abbastanza criptico e mal si adatta
