Synchronizacja na „tym” lub prywatnym obiekcie w Javie? [duplikować]

Możliwy duplikat:
Unikaj synchronizacji (tego) w Javie?

Jaka jest różnica między dwoma fragmentami kodu? Jakie są zalety i wady każdego z nich?

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