Reino: Code Quality
Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.
Code Correctness: Non-Synchronized Method Overrides Synchronized Method
Abstract
Los métodos sincronizados no deben reemplazarse con métodos no sincronizados.
Explanation
Una clase principal declara el método
Ejemplo 1: en el código siguiente, la clase
En este caso, se podría convertir una instancia de
synchronized
, garantizando un comportamiento correcto cuando varios subprocesos acceden a la misma instancia. Todos los métodos de reemplazo también deben ser declarados como synchronized
porque, de no ser así, podría producirse un comportamiento inesperado.Ejemplo 1: en el código siguiente, la clase
Foo
reemplaza a la clase Bar
, pero no declara el método synchronizedMethod
para que sea 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();
}
}
En este caso, se podría convertir una instancia de
Foo
en el tipo Bar
. Si se da la misma instancia a dos subprocesos distintos y synchronizedMethod
se ejecuta repetidamente, el comportamiento se impredecible.References
desc.structural.java.code_correctness_non_synchronized_method_overrides