Newsgroup: it.comp.java
Titolo: Keep-Alive-Timer

Salve a tutto il ng.,
in un'applicazione a volte rimane attivo questo Thread "Keep-Alive-Timer" .
Qualcuno sa che cosa è?
saluti
alberto


Mi sembra di ricordare che nel JDK 1.1.x era il thread che si occupava di rinnovare
l'affitto sugli oggetti remoti transienti. Come mai ti interessa? Con una bella
System.exit() risolvi di sicuro :-D
P.S.
Mi sembra anche di ricordare che fosse daemon, quindi dovrebbe "scendere" con
l'applicazione... che jdk stai usando?
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| (rimuovere gli spazi dall'indirizzo per rispondere via email)

Grazie della risposta Bruno,
mi interessa perchè nella applicazione vengono effettuate delle connessioni
utilizzando la classe URL a volte ( e non sempre) accade che a fine
procedura rimane attivo questo thread e non sono riuscito a capire il motivo
che lo scaturisce, cioè quale è la particolarità e/o la circostanza che in
alcuni casi rimane attivo. E affinche tutta la procedura possa considerarsi
conclusa ho un thread (di un altro gruppo di Thread) che mi testa un gruppo
particolare di Thread attivi( quelli del collegamento), quando quelli attivi
sono a zero....
Posso sicuramente identificare il thread in questione e procedere alla sua
eliminazione? In che modo usando lo stop deprecato? Mah!!
il jdk è 1.3
ciao a presto
alberto
<bbossola @ 
hotmail.com
 (Bruno Bossola)> ha scritto nel messaggio
news:3d33c2fa...@news.inet.it...


Alcune accortezze che leggendo i vari manuali ho trovato scritte in neretto
sono :
dichiarare i Thread di tipo deamon() in modo assicurarsi che in caso di
chiusura forzata o brutale dell'applicazione, questi vengano terminati.
Altra buona accortezza č inserirli in un ThreadGroup, in modo che un unico
interrupt sul gruppo si interrompono (quindi terminano) tutti i Thread in
esso contenuti.
Ciao.

 Altra buona accortezza è inserirli in un ThreadGroup, in modo che un unico


Scusa se insisto su questa cosa.
Come interrompi i Thread che hai lanciato?
Spero che non usi stop() (č deprecato).
I Thread č vivamente consigliato interromperli mediante
nomeThread.interrupt(), quindi utilizzare come test del ciclo infinito del
run(), il controllo :
    public void run()
    {
        while(!nomeThread.isInterrupted())
        {
        }
    }
In fase di chiusura di un'applicazione, questa prima di terminare, dovrebbe
assicurarsi di rilasciare le risorse e chiudere i Thread lanciati
(sicuramente queste cose le sai, ma te le chiedo cmq. solo per capire
eventualmente dove potrebbe essere l'errore).
In piů se dentro il ciclo infinito, contenuto nel run(), intercetti
l'eccezione :"InterruptedException", devi poi rifare nomeThread.interrupt(),
altrimenti la condizione : isInterrupted() non si verifica.
Prova anche a dichiarare il tuo Thread come deamon(), perň lo devi fare
prima dello start(), altrimenti non funziona questa cosa.
I Thread dichiarati cosě, vengono terminati in automatico, con la
terminazione del programma che li ha generati.
Ciao.


Beh. allora penso semplicemente sia un thread "timer" che si risveglia quando e' richiesto
buttare giu' la connessione HTTP. Il protocollo 1.1 prevede infatti che a seguito di una
richiesta la connessione TCP stessa possa essere mantenuta attiva per essere
successivamente riusata. Per impedire questo comportamento devi impostare nella richiesta
HTTP uno header opportuno che ora non ricordo :-), guarda la documentazione del
protocollo.


Come, come, come ... Bruno...
ormai devi avere un pò di pazienza e spiegarmi la cosa.
Non ho mai richiesto connessione TCP e neppure ho mai fatto uso di header
per una richiesta HTTP!
ciao
alberto
<bbossola @ 
hotmail.com
 (Bruno Bossola)> ha scritto nel messaggio
news:3d33f86a...@news.inet.it...


 I Thread dichiarati così, vengono terminati in automatico, con la



C'e' sempre una prima volta :-)
Con questo codice richiedi di usare il keep-alive (nel caso tu lo ometta significa,
semplificando, che non hai preferenze):
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Connection", "Keep-Alive");
Con questo codice invece richiedi di NON usare il keep-alive, vedi se funge e il thread
scompare:
    URLConnection conn = url.openConnection();
    conn.setRequestProperty("Connection", "close");
In realta' puo' essere comunque che il keep-alive ci sia comunque nel caso un server (non
standard) decida di chiedertelo e rimandi uno specifico token di keep-alive nella
risposta. 
Facci sapere comunque come va!


Ah, dimenticavo, qui trovi l'RFC del protocollo HTTP:
http://www.ietf.org/rfc/rfc2068.txt


 >ormai devi avere un pò di pazienza e spiegarmi la cosa...



Di niente.
Ah, una cosa: quota meglio il messaggio a cui rispondi: includi solo le parti
significative rispondendo direttamente a quelle e non includere al fondo tutto il
messaggio originale. Guarda come rispondo io ad esempio :-)
