code: public boolean isIdleExpire()
    {
      if (! _lifecycle.isActive())
        return true;
      
      long now = currentTimeActual();
      
      long idleExpire = _threadIdleExpireTime.get();
      
      int idleCount = _idleCount.get();
  
      // if idle queue is full and the expire is set, return and exit
      if (_idleMin < idleCount) {
        long nextIdleExpire = now + _idleTimeout;
  
        if (_idleMax < idleCount 
            && _idleMin < _idleMax) {
          /*
            && _threadIdleExpireTime.compareAndSet(idleExpire, nextIdleExpire)) {
            */
          _threadIdleExpireTime.compareAndSet(idleExpire, nextIdleExpire);
          
          return true;
        }
        else if (idleExpire < now
                 && _threadIdleExpireTime.compareAndSet(idleExpire,
                                                        nextIdleExpire)) {
          return true;
        }
      }
      
      return false;
    }
docs: Returns true if the thread should expire instead of going to the idle state.