awaitNanos
Implements timed condition wait.
If current thread is interrupted, throw InterruptedException.
Save lock state returned by .getState.
Invoke .release with saved state as argument, throwing IllegalMonitorStateException if it fails.
Block until signalled, interrupted, or timed out.
Reacquire by invoking specialized version of .acquire with saved state as argument.
If interrupted while blocked in step 4, throw InterruptedException.