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??
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.
É 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
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.
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.