Ciclo de Vida dos servlets

Galera, to com uma dúvida referente ao ciclo de vida dos Servlets. O container inicia o servlet quando este recebe uma solicitação e roda o método init(), e então o método service(). Porém no livro que eu estou lendo diz que só existe uma instancia de cada servlet e não varias conforme a quatidade de requisições. O que roda nas threads que o container aloca? Imaginei que cada 1 tivesse uma instancia diferente do servlet rodando com o parametro request diferente (ja que cada 1 vem de uma requisição diferente).
E quando é que roda o construtor afinal?

Boa tarde,

Quem gerencia as threads é o container em questão.
Assim que o container recebe uma requisição ele cria uma nova thread (bem como os objetos request e response), e os passa como parametros para o servlet.
Em seguida são processados os eventos do servlet init e service.

Os objetos request e response são dinâmicos, ou seja, variam para cada solicitação.

Sim. Isso eu entendi. Minha dúvida é como o container trata várias solicitações, ou seja, vários requests diferentes ao mesmo tempo se ele só tem 1 instância do servlet? E se ele só tem uma instancia do servlet oq é que roda nas threads?

O servlet recebe como parametro a thread?

Não tem nenhum problema em ter várias threads utilizando a mesma instância do Servlet.
Basta cada uma delas ter uma referência a essa instância, e chamar o método service para cada requisição - passando como parametro o Request e Response da requisição atual.

Um método pode ser chamado por várias threads ao mesmo tempo desde que ele tome certos cuidados para que não aconteça nenhum efeito indesejado. Essa caracterísitica é chamada de “thread-safe”.
No caso dos servlets, é importante que não seja alterado o estado do objeto (ou seja, nada de colocar variáveis de instância nele!). Se você fizer isso ele deixará de ser thread-safe, pois uma requisição vai influenciar na outra e aí o bicho pega.

[quote=iigorr]Sim. Isso eu entendi. Minha dúvida é como o container trata várias solicitações, ou seja, vários requests diferentes ao mesmo tempo se ele só tem 1 instância do servlet? E se ele só tem uma instancia do servlet oq é que roda nas threads?
[/quote]
Bom dia, isso o gomesrod respondeu:

[quote=gomesrod]
Não tem nenhum problema em ter várias threads utilizando a mesma instância do Servlet.
Basta cada uma delas ter uma referência a essa instância, e chamar o método service para cada requisição - passando como parametro o Request e Response da requisição atual.

Um método pode ser chamado por várias threads ao mesmo tempo desde que ele tome certos cuidados para que não aconteça nenhum efeito indesejado. Essa caracterísitica é chamada de “thread-safe”.
No caso dos servlets, é importante que não seja alterado o estado do objeto (ou seja, nada de colocar variáveis de instância nele!). Se você fizer isso ele deixará de ser thread-safe, pois uma requisição vai influenciar na outra e aí o bicho pega.[/quote]

O que o servlet recebe como parametros são os objetos request e response. Assim que o container recebe uma requisição ele cria uma nova thread, os objetos request e response e passa-os para o servlet requisitado.

Boa tarde pessoal, existe como executar apenas uma requisição por servlet, sendo que se o usuario enviar novas requisições ao mesmo servlet enquanto ele está processando a anterior?

O que desejo é garantir que ao sair do sistema (ou da página) o servlet pare de processar a requisição, caso houver um processo em andamento neste servlet ele ignora outros e redireciona o cliente para uma página de espera.

Alguma ideia de como implementar isso?