| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2005 22:40:19
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 07:41:15
|
escordeiro
Java Ninja
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 09:10:11
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 09:29:36
|
mcampelo
JavaEvangelist
![[Avatar]](/images/avatar/9246444d94f081e3549803b928260f56.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 10:43:41
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 10:52:47
|
mcampelo
JavaEvangelist
![[Avatar]](/images/avatar/9246444d94f081e3549803b928260f56.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 11:40:04
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 11:55:30
|
mcampelo
JavaEvangelist
![[Avatar]](/images/avatar/9246444d94f081e3549803b928260f56.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:15:22
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:16:07
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:19:00
|
mcampelo
JavaEvangelist
![[Avatar]](/images/avatar/9246444d94f081e3549803b928260f56.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:48:11
|
saulohenry
Debugger
![[Avatar]](/images/avatar/4669d6db6d5b6739b9194e999d907924.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:52:37
|
mcampelo
JavaEvangelist
![[Avatar]](/images/avatar/9246444d94f081e3549803b928260f56.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 12:58:07
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2005 13:06:26
|
saulohenry
Debugger
![[Avatar]](/images/avatar/4669d6db6d5b6739b9194e999d907924.jpg)
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.
|
|
|
 |
|
|