Sincronização em "this" ou objeto privado em Java? [duplicado]

Duplicata Possível:
Evite sincronizado (isso) em Java?

Qual é a diferença entre os dois pedaços de código? Quais são as vantagens e desvantagens de cada um?

1)

public class Example {
    private int value = 0;

    public int getNextValue() {
        synchronized (this) {
            return value++;
        }
    }
}

2)

public class Example {
    private final Object lock = new Object();
    private int value = 0;

    public int getNextValue() {
        synchronized (lock) {
            return value++;
        }
    }
}

questionAnswers(4)

yourAnswerToTheQuestion