Вы правы, создавая 'ReentrantLock' в самом методе каждый раз, чтобы синхронизировать Потоки с этой блокировкой не работает.Должен быть «общий» объект блокировки.
Пример в книге, возможно, слишком упрощен.
Документация ReentrantLock
использует следующий пример:
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
}
}