If you have a resource that only once person should access at a time you could use a semaphore of size one or you could just use a single ReentrantLock instance?
What are the subtle difference that make one or the other the better decision?
There are differences: