code: private void resumeConsumers()
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(this, tc, "resumeConsumers");
  
      synchronized(consumerList)
      {
        int listSize = consumerList.size();
        // Roundrobin the start point in the list as it's quite possible that
        // the first consumer that is resumed will cause the set to be suspended
        // again. If we always started at the top of the list it would always be
        // the same consumer that got to process any messages.
        startPoint = ++startPoint % listSize;
        for(int i = 0; i < listSize; i++)
        {
          JSLocalConsumerPoint lcp = (JSLocalConsumerPoint)consumerList.get((startPoint + i) % listSize);
          lcp.resumeConsumer(DispatchableConsumerPoint.SUSPEND_FLAG_SET_ACTIVE_MSGS);
        }
      }
      
      // The calling consumer's thread has just released a message, rather than let it go
      // straight back round and take another message (possibly suspending the set again
      // before any resumed thread gets a chance to run) we yield this thread - just to
      // be fair. We're nice like that.
      Thread.yield();
      
      if(TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(this, tc, "resumeConsumers");
    }
docs: Resume all the members of the set. This will only cause a real
  resume on consumers that are actually in the suspend state for
  reaching the set's max active mesasge limit. If they're not
  suspended (because they hadn't noticed the set was suspended)
  or they're suspended for a different reason (e.g local maxActiveMessage
  limit reached) then they'll remain suspended.