clockover
21-12-2010, 16:16
Come da titolo!
Ho una pagina jsp molto semplice che nella sua fase di init (jspInit()) chiama un thread, il quale si mette in ascolto di una serversocket! Il thread in questione è un qualcosa del tipo
while(true){
Socket sock = null;
sock = serversocket.accept();
exs.submit(unThreadPerLaRicezione(sock));
}
dove exs è un ExecutorService!
nella fase di destroy della Servlet (jspDetroy()) eseguo alcune operazioni quali chiusura del FileWriter del log, ecc... quando voglio chiudere anche il thread che è in ascolto eseguo una cancel(true) dato che il thread è rappresentato da una Future
Future ft = exs.submit(threadServer);
....
.....
void jspDestroy(){
ft.cancel(true);
}
Il problema è che andando a leggere il log di tomcat ho scoperto che il thread che ho cercato di uccidere è ancora li!
Questo è quello che mi dice netbeans
GRAVE: The web application [/App] appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Ho fatto anche altre prove, ad esempio un altro thread che a scadenza regolare, tipo di un secondo, scrive su un file qualcosa! Quando viene eseguita la destroy questo thread di prova finisce, mentre quello in ascolto sulla ServerSocket è ancora attivo!
Cosa mi sfugge da questa situazione? :confused: :confused:
edit:
anche quando chiudo Tomcat il thread rimane attivo
Ho una pagina jsp molto semplice che nella sua fase di init (jspInit()) chiama un thread, il quale si mette in ascolto di una serversocket! Il thread in questione è un qualcosa del tipo
while(true){
Socket sock = null;
sock = serversocket.accept();
exs.submit(unThreadPerLaRicezione(sock));
}
dove exs è un ExecutorService!
nella fase di destroy della Servlet (jspDetroy()) eseguo alcune operazioni quali chiusura del FileWriter del log, ecc... quando voglio chiudere anche il thread che è in ascolto eseguo una cancel(true) dato che il thread è rappresentato da una Future
Future ft = exs.submit(threadServer);
....
.....
void jspDestroy(){
ft.cancel(true);
}
Il problema è che andando a leggere il log di tomcat ho scoperto che il thread che ho cercato di uccidere è ancora li!
Questo è quello che mi dice netbeans
GRAVE: The web application [/App] appears to have started a thread named [pool-1-thread-1] but has failed to stop it. This is very likely to create a memory leak.
Ho fatto anche altre prove, ad esempio un altro thread che a scadenza regolare, tipo di un secondo, scrive su un file qualcosa! Quando viene eseguita la destroy questo thread di prova finisce, mentre quello in ascolto sulla ServerSocket è ancora attivo!
Cosa mi sfugge da questa situazione? :confused: :confused:
edit:
anche quando chiudo Tomcat il thread rimane attivo