Falhas do tipo CWE-1058

1 resultado

Elemento estático não-final compartilhado entre threads

Ocorre quando um método ou função acessa um elemento estático (variável ou campo) não declarado como final em um contexto multi-thread, permitindo que múltiplas threads o modifiquem simultaneamente. Isso causa condições de corrida e comportamento impredizível, pois o estado compartilhado fica inconsistente.

Exemplo

Uma classe com um campo estático `static int contador` sendo incrementado por múltiplas threads sem sincronização. Uma thread lê o valor, outra o altera antes da primeira escrever de volta, resultando em perda de incrementos e valores finais incorretos.

Como mitigar

Declare o campo como `final` se não precisar ser modificado após inicialização, ou use sincronização (locks, synchronized, AtomicInteger) ao acessar. Prefira variáveis locais ou thread-local quando possível para evitar compartilhamento.