import valuebased.classes.AbstractValueBased; class AC extends AbstractValueBased { final AC ac = new AC(); final Object objectAc = new AC(); { final AC localAc = new AC(); synchronized (ac) {} synchronized (objectAc) {} synchronized (localAc) {} synchronized (AC.class) {} synchronized (new Object()) {} f(ac); g(ac); } void f(AC ac) { synchronized (ac) {} } void g(Object ac) { synchronized (ac) {} } @SuppressWarnings("synchronization") void h(AC ac) { synchronized (ac) {} } }