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