code: private void driveRegisteredCallbacks(
      RegisteredCallbacks rMonitor,
      boolean isEmpty)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.entry(
            tc,
            "driveRegisteredCallbacks",
            new Object[] { rMonitor, new Boolean(isEmpty) });
  
      // Get the list of callbacks
      ArrayList callbackList = rMonitor.getWrappedCallbacks();
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
        SibTr.debug(tc, "Iterate over wrapped callbacks");
      // Iterate over the callbacks
      Iterator iter = callbackList.iterator();
      while (iter.hasNext())
      {
        WrappedConsumerSetChangeCallback wcb = (WrappedConsumerSetChangeCallback)iter.next();
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
          SibTr.debug(tc, "Drive callback: " + wcb.getCallback());
  
        // set the type of transition into the wrapped callback
        wcb.transitionEvent(isEmpty);
  
        try
        {
          //start up a new thread (from the MP's thread pool)
          //to drive the callback
          _messageProcessor.startNewThread(new AsynchThread(wcb));
        }
        catch (InterruptedException e)
        {
          // No FFDC code needed
  
          //Trace only
          SibTr.exception(tc, e);
        }
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "driveRegisteredCallbacks");
  
    }
docs: Method driveRegisteredCallbacks
  
  Iterate over a set of callbacks, driving each on a separate thread.
  
  @param rMonitor
  @param isEmpty