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

Entendi, galera valeu pela ajuda, vou dar uma analisada no geral do que foi falado por aqui e continuar os estudos, valeu !

[]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

Thiago Senna wrote:
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.


Se as Threads fossem gerenciadas pela própria Servlet, você não precisaria se preocupar em matar a sua Thread no destroy da Servlet.

O problema é justamente esse. Se você starta uma Thread na Servlet, a Thread é independente da Servlet e vai continuar rodando mesmo que você dê um stop em sua Web Application.

Ou você mata a Thread no destroy da Servlet (ou fazendo algum outro controle), ou então, ela só vai morrer quando você matar a JVM (parar o Container).

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

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

saulohenry wrote: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.


Saulo,

isto está correto.

Mas quando eu disse que já precisei usar Threads dentro de uma Servlet, não era para aumentar a capacidade de processamento da Servlet ou para atender múltiplos requests e sim para executar uma tarefa em background, independente dos requests que a Servlet recebia, mas que deviam acontecer durante o ciclo de vida da Web App.

Abraços,
Marco Campêlo

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

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

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

A bom, mas batendo na tecla que vc disse ... é um tanto arriscado , principalmente pela disponibilidade que seu aplicativo tem que ter , já que em alguma instancia vc vai ter que talvez ate derrubar seu aplicativo ou maqiuna. Adotar uma destruição no destroy é realmente a melhor pratica , que vc mencionou acima mas será que vai ser efetivo ? e se sua thread não terminar de fazer o trablaho sujo dela hehe, ai fica dificil adotar uma outra forma. Então a melhor forma seria não adotar a thread em um servelt talvez em um ejb que são mais gerenciaveis.
marciocamurati
JavaEvangelist
[Avatar]

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

Oque vocês sugerem usar em vez de uma thread ? Fazer o controle syncronized de um obejto por exemplo ? Com Wait(), Notify() e Notifyall() ?

[]s

Marcio Camurati
[WWW] [MSN] [ICQ]
saulohenry
Debugger
[Avatar]

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

Com certeza , com um bloco sincronized ou usando a interface singlethreadmodel.
mcampelo
JavaEvangelist
[Avatar]

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

saulohenry wrote:Com certeza , com um bloco sincronized ou usando a interface singlethreadmodel.


Servlet SingleThread não resolve o problema dele, que quer implementar uma "Servlet eterna"!

[]'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

Bom restou então utilizar um bloco syncronized então, vou trabalhar com ele, só uma ultima coisa esse bloco não é caracterizado como uma thread ?

Na documentação da Sun no método wait():

Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0).
The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.

This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.

[]s

Marcio Camurati
[WWW] [MSN] [ICQ]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

marciocamurati wrote:Oque vocês sugerem usar em vez de uma thread ? Fazer o controle syncronized de um obejto por exemplo ? Com Wait(), Notify() e Notifyall() ?

[]s


da p/ fazer um while(true) dentro do metodo doGet do servlet, com isso ele ficaria eternamente printando msg ate vc mandar sair do while.

[]'s

João Bier
Desenvolvedor Java
[Email]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team