import valuebased.classes.OpenValueBased; class One extends OpenValueBased { } class Two extends One { } class Three extends Two { } class ComplexVBHierarchy extends Three { } class Main { final ComplexVBHierarchy vb = new ComplexVBHierarchy(); { final ComplexVBHierarchy localVb = new ComplexVBHierarchy(); final Object objectVb = new ComplexVBHierarchy(); synchronized (vb) {} synchronized (localVb) {} synchronized (objectVb) {} synchronized (ComplexVBHierarchy.class) {} f(vb); g(vb); } void f(ComplexVBHierarchy vb) { synchronized (vb) {} } void g(Object vb) { synchronized (vb) {} } @SuppressWarnings("synchronization") void h(ComplexVBHierarchy vb) { synchronized (vb) {} } }