Dúvida sobre thread  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

Olá !

Estou com uma dúvida sobre thread, por exemplo eu criou um aplicativo que a cada acesso a ele cria uma thread, e fica imprindo dados na tela, quando é finalizado sei lá como por exemplo fechada a janela ele gera uma expception pois não consegue mais imprimir na tela, oque acontece com essa thread ela morre e libera a memória ? ou fica rodando ? se fica rodando como se faz pra matá-la e liberar a memória ?

Qualquer comentário já ajuda a me tirar essa dúvida valeu !

[]s

Marcio Camurati
[WWW] [MSN] [ICQ]
escordeiro
Java Ninja
[Avatar]
Membro desde: 20/08/2003 09:31:08
Mensagens: 257
Localização: Belo Horizonte
Offline

Se você termina o programa, todas as threads que ele criou também terminam.

Flickr
[Email] [Yahoo!] [MSN] [ICQ]
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

Concordo que seu eu fechar o aplicativo ele vai matar tudo mas no caso de ser um servlet (eu coloquei "aplicativo" ali em cima foi mals) ele fica persistente na memoria, e isso pelo jeito faz com que as threads mesmo teoricamente finalizadas fiquem ativas, e isso pode começar a gerar lentidão no acesso e etc correto ?

[]s

This message was edited 1 time. Last update was at 19/04/2005 09:10:53


Marcio Camurati
[WWW] [MSN] [ICQ]
mcampelo
JavaEvangelist
[Avatar]

Membro desde: 29/04/2003 09:36:36
Mensagens: 389
Localização: Rio de Janeiro/Brasil
Offline

Marcio,

não entendi muito bem o que você quis dizer em relação a Servlets e Threads.

Mas já tive uma experiência (negativa) e posso te alertar:

Se você cria uma thread dentro da Servlet, ela (a thread) é independente da Servlet. Isso quer dizer que se você der um STOP na Servlet, a thread vai continuar rodando.

Ou pior ainda: se você fizer um restart na Servlet, além da Thread antiga continuar rodando, dependendo de como você programou a criação da Thread, uma nova será criada e aí a cada restart da Servlet você terá Thread + 1!

Cuidado!

[]'s
Marco Campêlo
[Email] [Yahoo!] [MSN] [ICQ]
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

E como eu posso "obrigar" a matar essa thread para que esse tipo de problema não ocorra ou seja, sobrecarga, lentidão no servidor?
E uma dúvida mesmo ocorrendo uma exception a thread continua rodando e alocada na memória ?

[]s

Marcio Camurati
[WWW] [MSN] [ICQ]
mcampelo
JavaEvangelist
[Avatar]

Membro desde: 29/04/2003 09:36:36
Mensagens: 389
Localização: Rio de Janeiro/Brasil
Offline

marciocamurati wrote:E como eu posso "obrigar" a matar essa thread para que esse tipo de problema não ocorra ou seja, sobrecarga, lentidão no servidor?
[]s


http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/Servlet.html#destroy()

Você pode matar a Thread quando o destroy da Servlet for chamado.

[]'s
Marco Campêlo

This message was edited 1 time. Last update was at 19/04/2005 10:53:05

[Email] [Yahoo!] [MSN] [ICQ]
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

Mas o destory só será chamado quando o servlet for realmente finalizado (reinico do servidor ou desligamento) e nesse caso eu irei continuar com o mesmo problema pois duarante o funcionamento sa aplicação, as threads ficaram persistentes e afetando o desempenho do servidor, correto ?

Ou estou viajando ?

[]s

This message was edited 1 time. Last update was at 19/04/2005 11:40:31


Marcio Camurati
[WWW] [MSN] [ICQ]
mcampelo
JavaEvangelist
[Avatar]

Membro desde: 29/04/2003 09:36:36
Mensagens: 389
Localização: Rio de Janeiro/Brasil
Offline

marciocamurati wrote:Mas o destory só será chamado quando o servlet for realmente finalizado (reinico do servidor ou desligamento) e nesse caso eu irei continuar com o mesmo problema pois duarante o funcionamento sa aplicação, as threads ficaram persistentes e afetando o desempenho do servidor, correto ?


Entendo que o destroy será chamado quando você der um stop na sua WebApplication.

BTW, por que você precisa de Threads na Servlet?

[]'s
Marco Campêlo
[Email] [Yahoo!] [MSN] [ICQ]
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

É só um estudo que estou fazendo de deixar um "aplicativo" no caso um servlet eterno ou seja que ele fique mandando msg pra tela, enquanto estiver vivo, com a utilização de syncronizes, wait() e notify() e tambem consigo o mesmo digamos processo, mas o problema fica na mesma, que é mesmo finalizando o servlet sobre restos de thread, e não consegui achar nenhum meio de fazer uma "limpeza" geral.

Marcio Camurati
[WWW] [MSN] [ICQ]
marciocamurati
JavaEvangelist
[Avatar]

Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline

Se alguem tiver alguma dica, por favor coloque aqui!

Marcio Camurati
[WWW] [MSN] [ICQ]
mcampelo
JavaEvangelist
[Avatar]

Membro desde: 29/04/2003 09:36:36
Mensagens: 389
Localização: Rio de Janeiro/Brasil
Offline

marciocamurati wrote:É só um estudo que estou fazendo de deixar um "aplicativo" no caso um servlet eterno ou seja que ele fique mandando msg pra tela, enquanto estiver vivo, com a utilização de syncronizes, wait() e notify() e tambem consigo o mesmo digamos processo, mas o problema fica na mesma, que é mesmo finalizando o servlet sobre restos de thread, e não consegui achar nenhum meio de fazer uma "limpeza" geral.


Finalizando a Servlet sobra restos da Thread?

Por que?

O que eu disse é que você precisa implementar o método destroy () na Servlet e dentro dele fazer o trabalho de matar a Thread.

Simples assim!

[]'s
Marco Campêlo

This message was edited 1 time. Last update was at 19/04/2005 12:19:17

[Email] [Yahoo!] [MSN] [ICQ]
saulohenry
Debugger
[Avatar]

Membro desde: 24/03/2005 11:31:36
Mensagens: 72
Offline

Usar thread em servelet não é uma boa forma de programação e sim usar um pool , e é bom evitar mulplas treads com aplicativos web.
mcampelo
JavaEvangelist
[Avatar]

Membro desde: 29/04/2003 09:36:36
Mensagens: 389
Localização: Rio de Janeiro/Brasil
Offline

saulohenry wrote:Usar thread em servelet não é uma boa forma de programação e sim usar um pool , e é bom evitar mulplas treads com aplicativos web.


Concordo contigo que startar uma Thread dentro de uma Servlet pode ser algo (muito) nocivo se você não souber MUITO bem o que está fazendo.

Mas não entendi como um pool (pool de que?) poderia substituir uma Thread.

[]'s
Marco Campêlo
[Email] [Yahoo!] [MSN] [ICQ]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Vou junto com o Saulo!

Não é aconselhável utilizar threads dentro de webcontainer, já que é o container quem se responsabiliza pelo gerenciamento das threads, que seriam as próprias servlets que atendem as requisições dos usuários. à partir da hora que vc utiliza uma thread dentro da sua aplicação, é sem dúvida nenhuma algo muito arriscado, a não ser que você conheça com detalhes o ciclo de vida da servlet. Mas ainda sim, evite!

Procure uma outra alternativa para solucionar seu problema!

Espero não ter viajado, e espero ter ajudado!
Abraços!
Thiago
[Email]
saulohenry
Debugger
[Avatar]

Membro desde: 24/03/2005 11:31:36
Mensagens: 72
Offline

O container de servlet pode criar um pool para atender as varias chamadas a um servlet o interessante de se fazer realmente em servlet é usar um bloco de sincronismo para acessar ou mudar recursos que não podem ser alterados simultaneamente ou implementar a interface SigleThreadModel na servlet ai o conteiner pode usar um monitor para travar e liberar a thread que ele esta usando para responder uma servlet como um pool.
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team