Всем привет! Никак не могу разобраться как работает synchronized. Например:
public void doSomething() {
    synchronized (this) {
        something1();
        something2();
    }
}
Тут вроде все понятно, два потока не смогут одновременно вызвать методы something1 и something2. Мне непонятно следующее: synchronized (this). Зачем указывать (this)? почему нельзя просто:
public void doSomething() {
    synchronized {
        something1();
        something2();
    }
}
Что значит синхронизация по объекту? Как я понял, блок кода, который заключен в synchronized не может быть выполнен параллельно несколькими потоками. Это понятно. Но что это за объект в круглых скобочках? Кто-нибудь может объяснить?