Questão de Programação — Linguagens de programação — FGV 2025
- Código
- fg107884
- Banca
- FGV
- Órgão
- CPRM
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista em Geociências - Geoprocessamento
- AI e III, apenas.
- BII, apenas.
- CI, apenas.
- DII e III, apenas.
- EI, II e III.
GabaritoA — I e III, apenas.
Gabarito: letra A. Apenas as afirmativas I e III estão corretas. No modelo padrão de servlets, o container cria uma única instância do servlet e atende cada requisição HTTP em uma nova thread, o que exige cuidado com variáveis de instância compartilhadas — elas podem gerar condições de corrida se não houver sincronização. A afirmativa II erra ao afirmar que servlets são thread-safe por padrão: eles não são, e o desenvolvedor deve gerenciar a concorrência manualmente quando necessário.
Afirmativa | Conteúdo | Correção | Justificativa |
|---|---|---|---|
I | Cada requisição HTTP pode ser atendida por uma nova thread gerenciada pelo container, enquanto a instância do servlet é única por padrão. | ✅ Correta | O container mantém uma única instância do servlet e atende cada requisição em uma thread separada do pool. |
II | Os servlets são thread-safe por padrão, não sendo necessário gerenciar concorrência manualmente. | ❌ Incorreta | Servlets não são thread-safe por padrão; o desenvolvedor deve gerenciar concorrência (ex.: |
III | Recursos compartilhados entre requisições, como variáveis de instância, podem gerar condições de corrida se não forem tratados corretamente. | ✅ Correta | O modelo single-instance/multi-thread expõe variáveis de instância a race conditions sem proteção adequada. |
O container de servlets (ex.: Tomcat, Jetty) tipicamente mantém uma única instância do servlet para toda a aplicação. Cada requisição é delegada a uma thread separada do pool, ambas gerenciadas pelo container. Esse é o comportamento default e mais eficiente. A afirmativa está correta.
Servlets não são thread-safe por padrão. Como a mesma instância atende múltiplas threads concorrentemente, variáveis de instância (e outros recursos compartilhados) podem ser acessados simultaneamente, gerando race conditions. Cabe ao programador usar synchronized, objetos imutáveis ou ThreadLocal para garantir a segurança. Dizer que não é necessário gerenciar concorrência é incorreto.
Exatamente por causa do modelo single-instance/multi-thread, variáveis de instância são compartilhadas entre requisições. Se não forem protegidas (por exemplo, com sincronização), podem sofrer condições de corrida. A afirmativa está correta.
O item II tenta convencer o candidato de que o container já cuida da segurança de threads. Mas o container apenas gerencia as threads; a proteção de dados compartilhados é responsabilidade do desenvolvedor. Não caia nessa: servlet não é thread-safe por padrão.
Gabarito: letra A (I e III, apenas).
Link permanente: /questoes/fg107884