When @Overrides of synchronized methods are not themselves synchronized, the result can be improper
synchronization as callers rely on the thread-safety promised by the parent class.
public class Parent {
synchronized void foo() {
//...
}
}
public class Child extends Parent {
@Override
public foo () { // Noncompliant
// ...
super.foo();
}
}
public class Parent {
synchronized void foo() {
//...
}
}
public class Child extends Parent {
@Override
synchronized foo () {
// ...
super.foo();
}
}