Servlet e Thread

4 respostas
L

Pessoal estou com a seguinte dúvida, se um servlet cria uma instância de uma classe que estende a Thread e executa o start().

Pergunta, se o container resolver retirar o servlet de serviço e a thread ainda não tiver terminado o seu processamento, ela continua até o fim?

Obrigado

4 Respostas

Rafael_Steil

Depende…

Se o teu thread for daemon ( setDaemon(true) ), entao a aplicacao termina assim que receber o sinal, caso contrario o servidor vai ficar pendurado ate o thread finalizar.

Rafael

T

Muito interessante sua pergunta. Realmente nunca tinha imaginado no que aconteceria aos servlets quando este eh indisponibilizado, por exemplo, dando um undeploy de uma aplicacao no container. Matar a thread seria meio sacanagem, e resolvi testar.
Criei um servletzinho, com um loop infinito, que imprimia no System.out numeros incrementais. Fiz deploy da aplicacao no JBoss(Tomcat) e invoquei o servlet pelo browser. Ele comecou a contar como esperado.
Realizei um undeploy da aplicacao e o jboss informou isto:

Como meu laco era infinito, essa instacia que estava esperando ser desalocada ( e que continuou rodando mesmo apos o undeploy) nunca terminava. Tive que reestartar o container.

Ou seja, as threads que ja estao executando um servlet nao param com a indisponibilizacao desse, porem, novas threads nao fazem uso desse sevlet nao.

M

pessoal estou com um problema quando minha aplicacao que chama o thread termina esta matando a thread junto, preciso que o programa rode como ose fosse um serviço
da uma olhada nos arquivos :

public class Serverinit {

   public static void main(String[] args) {
   Thread thread = new Server();
       thread.setDaemon(true);
       thread.start();   
   }

}

e a thread:

import java.net.*;

public class Server extends Thread
{
        private ServerSocket s;
        private Socket client;
        private Connection c;

        Server(){
           //setDaemon(true);
        }
           
        public void run()
        {
           
                try
                {
                        s=new ServerSocket(5155);
                }
                catch (java.io.IOException e)
            {
                        System.out.println(e);
                        System.exit(1);
                }
                System.out.println("servidor escutando");
                try
                {
                        while (true)
                        {
                              client = s.accept();
                                c = new Connection(client);
                                c.start();
                               
                        }
                }
                catch (java.io.IOException e)
                {
                        System.out.println(e);
                }
        }
       
}

bom se alguem puder me ajudar !!!

L

Então deixe o “setDaemon( false )”

flw

Criado 6 de fevereiro de 2004
Ultima resposta 11 de ago. de 2005
Respostas 4
Participantes 4