base/common/src/main/com/thesett/common/util/concurrent/BaseUnaryCondition.java
public void await(T t) throws InterruptedException
    {
        synchronized (monitor)
        {
            long waitNanos = evaluateWithWaitTimeNanos(t);

            // Loop forever until all conditions pass or the thread is interrupted.
            while (waitNanos > 0)
            {
                // If some conditions failed, then wait for the shortest wait time, or until the thread is woken up by
                // a signal, before re-evaluating conditions.
                long milliPause = waitNanos / 1000000;
                int nanoPause = (int) (waitNanos % 1000000);

                monitor.wait(milliPause, nanoPause);

                waitNanos = evaluateWithWaitTimeNanos(t);
            }
        }
    }
public void await(T t) throws InterruptedException
    {
        synchronized (monitor)
        {
            long waitNanos = evaluateWithWaitTimeNanos(t);

            // Loop forever until all conditions pass or the thread is interrupted.
            while (waitNanos > 0)
            {
                // If some conditions failed, then wait for the shortest wait time, or until the thread is woken up by
                // a signal, before re-evaluating conditions.
                long milliPause = waitNanos / 1000000;
                int nanoPause = (int) (waitNanos % 1000000);

                monitor.wait(milliPause, nanoPause);

                waitNanos = evaluateWithWaitTimeNanos(t);
            }
        }
    }
Wait for the predicate to become true on the specified object.

@param  t The object to test for predicate membership.

@throws InterruptedException If interrupted whilst waiting.