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.


== Noncompliant Code Example

----
public class Parent {

  synchronized void foo() {
    //...
  }
}

public class Child extends Parent {

 @Override
  public void foo () {  // Noncompliant
    // ...
    super.foo();
  }
}
----


== Compliant Solution

----
public class Parent {

  synchronized void foo() {
    //...
  }
}

public class Child extends Parent {

  @Override
  synchronized void foo () {
    // ...
    super.foo();
  }
}
----


== See

* https://wiki.sei.cmu.edu/confluence/x/gzdGBQ[CERT, TSM00-J] - Do not override thread-safe methods with methods that are not thread-safe

