Variáveis Static na Web

Bom dia, galera!
Tudo bem?

Qual seria o comportamento de uma variável estática em aplicações WEB?

Até onde eu sei, uma variável estática só possui uma única instância. Logo, quando tenho uma aplicação WEB com vários usuários utilizando, existirá uma única instância para todos os usuários?

Obrigado!

A resposta simples é “não use”.
O problema é o seguinte: imagine que você tenha uma aplicação Web que está sendo dividida por vários servidores Web. Mesmo com o recurso de “session affinity” (ou seja, requisições de um determinado cliente, que tem uma determinada sessão, serão atendidas a partir do login por um determinado servidor Web em vez de qualquer outro do conjunto de servidores), você ainda não vai ter uma variável que seja compartilhada por todas as instâncias da aplicação Web que estão rodando em várias máquinas diferentes.
Se precisar de algo assim (por exemplo, um criador de números de sequência) isso deve ser deixado em um outro lugar, como no banco de dados.

Eu já tive um problema meio chatinho com variáveis estáticas, que pareciam bem inocentes mas no meu caso não foi assim.

Suponha que você quisesse otimizar a formatação de uma data usando uma instância estática de SimpleDateFormat.
Isso parecia funcionar muito bem, até que quando o site começou a ter vários usuários simultâneos, o SimpleDateFormat começou a quebrar.
A solução, nesse caso em particular, foi usar um ThreadLocal, mas nem sempre isso funciona direito.

E a propósito, se sua solução envolver o uso de um “synchronized” para proteger o acesso a variáveis estáticas que referenciam classes que não são “thread-safe” (como é o caso de SimpleDateFormat ou DecimalFormat), não é uma solução e sim um problema, porque isso se constituirá em um gargalo no seu sistema.

Evite usar variáveis estáticas o mais possível.

Em resumo, variáveis estáticas na web causam uma contradição no espaço-tempo, e com isso você pode provocar o fim do universo… ou, em escala menor, do seu emprego.

Fora da web, o efeito é similar. static é só para constantes e, em alguns casos, métodos. Para os demais casos, se prepare para se tornar um pária na sociedade da programação e ser apontado por outros programadores com cara de nojo na rua.

Entendo.

Eu fiz alguns testes aqui e percebi esse problema. Aí resolvi pesquisar para ter certeza.

Muito obrigado a todos!