Зачем использовать ReentrantLock, если можно использовать синхронизированный (этот )?

Я пытаюсь понять, что делает блокировку параллелизма такой важной, если можно использовать synchronized (this). В фиктивном коде ниже я могу сделать либо:

  1. синхронизировать весь метод или синхронизировать уязвимую область(synchronized(this){...})
  2. ИЛИ заблокируйте уязвимую область кода с помощью ReentrantLock.

Код:

    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;
}
306
задан Hearen 29 March 2019 в 20:03
поделиться