Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: Non-Synchronized Method Overrides Synchronized Method
Abstract
Métodos sincronizados não devem ser substituídos por métodos não sincronizados.
Explanation
Uma classe pai declarou o método
Exemplo 1: No código a seguir, a classe
Nesse caso, uma instância de
synchronized
, garantindo o comportamento correto quando vários threads acessam a mesma instância. Todos os métodos de substituição também devem ser declarados como synchronized
, caso contrário, um comportamento inesperado poderá ocorrer.Exemplo 1: No código a seguir, a classe
Foo
substitui a classe Bar
, mas não declara o método synchronizedMethod
como synchronized
:
public class Bar {
public synchronized void synchronizedMethod() {
for (int i=0; i<10; i++) System.out.print(i);
System.out.println();
}
}
public class Foo extends Bar {
public void synchronizedMethod() {
for (int i=0; i<10; i++) System.out.print(i);
System.out.println();
}
}
Nesse caso, uma instância de
Foo
pode ser convertida no tipo Bar
. Se a mesma instância for fornecida a dois threads separados e synchronizedMethod
for executado repetidamente, o comportamento será imprevisível.References
desc.structural.java.code_correctness_non_synchronized_method_overrides