Fair ReentrantLock

ReentrantLock offers a ReentrantLock(boolean) constructor.
The boolean parameter stands for "fair". If set to true, a new
ReentrantLock will be created with the guarantee of fairness in
acquisition (something like FIFO lock aquisition).
This is much desirable since the default acquisition policy is
undefined and can lead to starvation.
Imagine, as an example, what would happen if the lock were granted
not to the thread waiting for the longest time but to the thread
having the lower thread id...