public boolean isGrantable(boolean noWaitersBeforeMe,
This routine can be called to see if a lock currently on the wait
list could be granted. If this lock has waiters ahead of it
then we do not jump over the waiter(s) even if we can be granted.
This avoids the first waiter being starved out.
Add a lock into this control, granted it if possible.
This can be entered in several states.
The Lockable is locked (granted queue not empty), and there are no waiters (waiting queue is empty)
The Lockable is locked and there are waiters
The Lockable is locked and there are waiters and the first is potentially granted
The Lockable is unlocked and there are waiters and the first is potentially granted. Logically the item is
still locked, it's just that the lock has just been released and the first waker has not woken up yet.
This call is never entered when the object is unlocked and there are no waiters.
1) The Lockable has just been unlocked,