@Override
  public Iterator<Runnable> iterator() {
    return new Iterator<Runnable>() {
      final Iterator<Call> underlyingIterator = underlyingQueue.iterator();

      @Override
      public Runnable next() {
        return underlyingIterator.next();
      }

      @Override
      public boolean hasNext() {
        return underlyingIterator.hasNext();
      }

      @Override
      public void remove() {
        underlyingIterator.remove();
      }
    };
  }
A BlockingQueue reports waiting time in queue and queue length to ThriftMetrics.
hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/CallQueue.java