Bloqueio de método sincronizado Java no objeto ou método?

Se eu tiver 2 métodos sincronizados na mesma classe, mas cada um acessando variáveis diferentes, 2 threads podem acessar esses 2 métodos ao mesmo tempo? O bloqueio ocorre no objeto ou é tão específico quanto as variáveis dentro do método sincronizado?

Exemplo:

class X {

    private int a;
    private int b;

    public synchronized void addA(){
        a++;
    }

    public synchronized void addB(){
        b++;
    }

}

2 threads podem acessar a mesma instância da classe X executandox.addA() ex.addB() ao mesmo tempo?

questionAnswers(10)

yourAnswerToTheQuestion