Newsgroup: it.comp.java
Titolo: Piccolo ripasso sui THREADS.

Sarei felice se qualcuno mi scrivesse qualche riga di chiarimento su
alcuni aspetti dei Threads. In effetti la gestione dei Threads in Java di
per se' non è così complicata - almeno in apparenza ; basta
implementare la classe runnable o estendere la classe Thread e poi
avere cura che il Thread parta con il metodo start().
Fin qui è semplice. Almeno se si vuole costruire un applicativo molto
banale.
Un interrogativo che molti si pongono è , nel caso in cui ci sono più
Threads in esecuzione nella stessa classe come si fa a gestire
gli eventi in base al Thread che sta correndo? in effetti il metodo
run è uno solo e i Threads sono tanti.
Sfogliando i manuali si ha nozione del metodo
Thread.currentThread
come prima idea ho pensato di settare i nomi dei Threads con dei
numeri identificativi tipo 1,2,3 etc. e poi di castare il current Thread
name in un int di modo che nel metodo run() ho potuto piazzarci un bell' if
(o switch se preferite) tipo
if Thread.currentThread....   = 1  [ESEGUI IL CODICE x il PRIMO THREAD]
if Thread.currentThread....   = 2  [ESEGUI IL CODICE x il SECONDO THREAD]
Ho così costruito una piccola applicazione e il tutto funziona a dovere. Le
cose non vanno così bene purtroppo con gli applet perchè come
potete immaginare ci sono altri Thread collegati all' AWT   per cui non sono
riuscito a venirne a capo. Sembra che all'interno di un while l'unico
current Thread sia quello dell'AWT.
La domanda che spero mi risponderete è quindi: è questo il giusto approccio
nell'usare i Thread? o forse non serve a nulla predisporre una lista di
comandi da eseguire nel caso stia correndo un Thread anzichè un altro,
magari sto percorrendo una strada sbagliata.....
p.s. Un piccolo quesito extra: su di una famosa pubblicazione (Java tutto e
oltre dell'Apogeo) c'e' un esempio (CountThreadTest) in cui si
fanno partire 5 Thread all'interno di un for, con
t.start      dove ---Thread t
ma non dovrebbero avere nomi diversi i threads? a prima vista viene da
pensare che in questo modo verranno eliminati dal meccanismo del garbage
collection perchè tutti con lo stesso nome.
Aspetto fiducioso qualche commento da parte Vostra!!
A presto!
Francesco.

 collection perchè tutti con lo stesso nome.
Sinceramente non saprei. Quello che mi viene in mente e' il fatto che un
prog in java resta attivo finche' c'e' almeno un thread non deamon che
gira. Forse ogni thread dichiara internamente una reference a se stesso
in modo da diventare "immune" al gc.
La cosa piu' semplice e' provare: fai un thread che scrive un carattere,
dichirando la reference in un metodo, e subito dopo chiami il gc()
(chiamalo piu' di una volta per essere sicuro).
Ciao
-- 
...almost any game *CAN* be imagined to be an RPG, but a "real RPG"
would facilitate role-playing, not require spending most of your effort
on sustaining your SOD.
M. Hughes

in modo da diventare "immune" al gc.
Non se il motivo sia quello, ma č sicuro che un Thread puň vivere
anche se tu non tieni la reference verso di esso. In un'infrastruttura
con cui lavoro, c'č addirittura un metodo per creare Thread di un
certo tipo senza che ti sia ritrornata alcuna reference: chiami il
metodo e il Thread parte per i fatti suoi.
Dopotutto anche un qualsiasi programma che dal main lancia qualche
fienstra e non fa piů nient'altro, fa la stessa cosa: il main muore ed
il thread AWT continua per i fatti suoi.
--
Bye,
  Dario
ICQ: 
http://wwp.mirabilis.com/11871099
Remove anti-spam from e-mail address

 > collection perchè tutti con lo stesso nome.
Semplicemente, il nome *pubblico* del thread (un oggetto Stringa) non
ha niente a che vedere con l'ID interno usato per identificare gli
oggetti nella JVM - e usato dal gc. 
Un thread anonimo non ha un nome pubblico: di conseguenza, se instanzi 
due volte in modo anonimo lo stesso thread, il *programma* non avra' 
modo di distinguerli per nome - ma la JVM assegnera due ID diversi alle 
due istanze, e quindi *lei* puo' distinguerli.
Saluti,
	Cris