Qual è la differenza tra sincronizzato su lockObject e usando questo come blocco?

Conosco la differenza tra il metodo sincronizzato e il blocco sincronizzato, ma non sono sicuro della parte del blocco sincronizzata.

Supponendo che io abbia questo codice

class Test { private int x=0; private Object lockObject = new Object(); public void incBlock() { synchronized(lockObject) { x++; } System.out.println("x="+x); } public void incThis() { // same as synchronized method synchronized(this) { x++; } System.out.println("x="+x); } } 

In questo caso qual è la differenza tra l’uso di lockObject e l’utilizzo di questo come blocco? Sembra essere lo stesso per me ..

Quando decidi di utilizzare il blocco sincronizzato, come decidi quale object deve essere il blocco?