private void notifyPendingCountListeners(final Long currentPendingCount) {
   pendingCountLock.lock();
   try {
     for (final Long limit : pendingCount_limitListener.keySet()) {
       if (currentPendingCount <= limit) {
         final Condition condition = pendingCount_limitListener.get(limit);
         if (condition != null) {
           condition.signalAll();
         }
       }
     }
   } finally {
     pendingCountLock.unlock();
   }
 }
 /**
  * Waits for pendingCount to shrink to a given limit size.
  *
  * <p>WARNING: Pay attention when using this feature so that executors don't have circular task
  * dependencies. If they depend on each others pendingCount, this may cause a deadlock!
  */
 public void awaitPendingCount(final long limit) throws InterruptedException {
   pendingCountLock.lock();
   try {
     final Condition condition = pendingCount_limitListener.get(limit);
     while (getPendingCount() > limit) {
       Threads.throwIfInterrupted();
       condition.await();
     }
   } finally {
     pendingCountLock.unlock();
   }
 }