import valuebased.classes.IValueBased; class IVB implements IValueBased { final IVB vb = new IVB(); { final IVB localVb = new IVB(); final Object objectVb = new IVB(); synchronized (vb) {} synchronized (localVb) {} synchronized (objectVb) {} synchronized (IValueBased.class) {} synchronized (IVB.class) {} f(vb); g(vb); } void f(IVB vb) { synchronized (vb) {} } void g(Object vb) { synchronized (vb) {} } @SuppressWarnings("synchronization") void h(IVB vb) { synchronized (vb) {} } }