Po co używać ReentrantLock, jeśli można użyć synchronizacji (to)?

Próbuję zrozumieć, co sprawia, że ​​blokada współbieżności jest tak ważna, jeśli można ją użyćsynchronized (this). W poniższym fałszywym kodzie mogę:

zsynchronizował całą metodę lub zsynchronizował zagrożony obszar (zsynchronizowany (to) {...})LUB zablokuj obszar podatnego kodu za pomocą ReentrantLock.

Kod:

    private final ReentrantLock lock = new ReentrantLock(); 
    private static List<Integer> ints;

    public Integer getResult(String name) { 
        .
        .
        .
        lock.lock();
        try {
            if (ints.size()==3) {
                ints=null;
                return -9;
            }   

            for (int x=0; x<ints.size(); x++) {
                System.out.println("["+name+"] "+x+"/"+ints.size()+". values >>>>"+ints.get(x));
            }

        } finally {
            lock.unlock();
        } 
        return random;
}

questionAnswers(6)

yourAnswerToTheQuestion