org.linkedin.util-core/src/main/java/org/linkedin/util/concurrent/ThreadControl.java
public void waitForBlock(Object key, Timespan timeout) throws TimeoutException, InterruptedException
  {
    _lock.lock();
    try
    {
      long endTime = System.currentTimeMillis() + timeout.getDurationInMilliseconds();

      while(!_waitingForBlock.contains(key))
      {
        ConcurrentUtils.awaitUntil(_blockCondition, endTime);
      }
    }
    finally
    {
      _lock.unlock();
    }
  }
public void waitForBlock(Object key, Timespan timeout) throws TimeoutException, InterruptedException
  {
    _lock.lock();
    try
    {
      long endTime = System.currentTimeMillis() + timeout.getDurationInMilliseconds();

      while(!_waitingForBlock.contains(key))
      {
        ConcurrentUtils.awaitUntil(_blockCondition, endTime);
      }
    }
    finally
    {
      _lock.unlock();
    }
  }
Blocking call to wait for a thread to call <code>block</code>.

@param key the key we are waiting for
@throws TimeOutException
@throws InterruptedException