code: public void init(
      AOStream parent,
      String selectionCriteriasAsString,
      ConsumableKey[] consumerKeys,
      long idleTimeout,
      MPAlarmManager am,
      SelectionCriteria[] selectionCriterias)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(
          tc,
          "init",
          new Object[] {
            parent,
            selectionCriteriasAsString,
            consumerKeys,
            Long.valueOf(idleTimeout),
            am,
            selectionCriterias });
  
      this.lock();
      try
      {
        this.parent = parent;
        this.selectionCriteriasAsString = selectionCriteriasAsString;
        this.cks = consumerKeys;
        this.ck = consumerKeys[0];
        this.selectionCriterias = selectionCriterias;
  
        this.isready = false;
        this.dispatcher = cks[0].getConsumerManager(); // all cks[i] have the same ConsumerDispatcher
        this.temporarilyStopped = !dispatcher.getDestination().isReceiveAllowed();
        this.closed = false;
        this.listOfRequests = new LinkedList();
        this.tableOfRequests = new HashMap<Long, AORequestedTick>();
        this.idleTimeout = idleTimeout;
        this.am = am;
        
        if (ck instanceof GatheringConsumerKey)
          this.gatherMessages = true;
        
        if (idleTimeout > 0)
          this.idleHandler = am.create(idleTimeout, this);
      }
      finally
      {
        this.unlock();
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "init");
  
    }
docs: Constructor
  @param parent
  @param selector The selector
  @param ck
  @param idleTimeout When there is no waiting request for more than this period of time (in ms), this object will close itself