В этом нет магии. Вы в безопасности, если и только если все потоки, обращающиеся к объекту, используют одну и ту же блокировку - будь то ReentrantLock
или любой другой мьютекс, например, блок synchronized
.
Существование ReentrantLock
оправдано тем, что оно обеспечивает большую гибкость, чем synchronized
: например, вы можете просто попытаться получить блокировку - невозможно с synchronized
.