Servelts thread safe?

4 respostas
analyser

Olá amigos,

uma pequena pergunta, se eu realizar a minhas criações de objetos e variaveis apenas dentro dos metodos doPost e doGet e não na classe, estarei com minha servelts thread safe??

Ou seja quando trabalho com variaveis e objetos locais e não globais terei minha servelts thread safe??

Obrigado

4 Respostas

kaique

Sim. Me corrigam se eu estiver errado, mas quando você submete uma requisição ao servlet, uma nova thread será criada para tratar essa requisição. Dessa forma não existe como thread acessar/alterar valores encontrados no “heap” de outra thread.

[]'s.

analyser

É que ouvi dizer tambem, que as variaveis e objetos globais podem ser subscritas pelas threads de cada requisição e as locais ficam livre dessas subscritass

É isso mesmo??

Abraços

marcelo_mococa

Você até pode ter variáveis a nível de classe, mas o teu servlet deve extender SingleTheadModel. Mas pelo amor de Deus, nunca faça isso, rs.

O que acontece é que o conteiner cria apenas uma instância do servlet e para cada requisição ele cria uma thread para te atender. Como é apenas um objeto, se uma thread alterar o valor de algum atributo do servlet, as outras threads também serão afetadas.

Resumindo:
Nunca crie variáveis de classe em um servlet.
Deixe tudo dentro dos métodos que tratam as requisições, dessa forma a VM cuidará do resto.

ramilani12

Basta ler o Java doc

Servlets typically run on multithreaded 
servers, so be aware that a servlet 
must handle concurrent requests and be 
careful to synchronize access to shared resources. 
Shared resources include in-memory data such 
as instance or class variables and 
external objects such as files, database 
connections, and network connections. 
See the  Java Tutorial on Multithreaded 
Programming for more information on handling 
multiple threads in a Java program.

http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServlet.html

Criado 17 de agosto de 2007
Ultima resposta 17 de ago. de 2007
Respostas 4
Participantes 4