code: public synchronized boolean enqueue(Transaction transaction) {
          mTotalEnqueueAttempts++;
  
          if (transaction == null || mThreadPool.isClosed()) {
              return false;
          }
  
          int queueSize;
          if ((queueSize = mQueue.size()) >= mMaxSize) {
              if (mListeners.size() > 0) {
                  TransactionQueueEvent event =
                      new TransactionQueueEvent(this, transaction);
  
                  Iterator it = mListeners.iterator();
                  while (it.hasNext()) {
                      ((TransactionQueueListener)it.next())
                          .transactionQueueFull(event);
                  }
              }
              return false;
          }
  
          if (!mSuspended) {
              if (!ensureWaitingThread()) {
                  return false;
              }
          }
  
          mTotalEnqueued++;
  
          TransactionQueueEvent event =
              new TransactionQueueEvent(this, transaction);
  
          mQueue.addLast(event);
  
          if (++queueSize > mPeakQueueSize) {
              mPeakQueueSize = queueSize;
          }
  
          notify();
  
          if (mListeners.size() > 0) {
              Iterator it = mListeners.iterator();
              while (it.hasNext()) {
                  ((TransactionQueueListener)it.next())
                      .transactionEnqueued(event);
              }
          }
  
          return true;
      }
docs: Enqueues a transaction that will be serviced when a worker is
  available. If the queue is full or cannot accept new transactions, the
  transaction is not enqueued, and false is returned.
  
  @return true if enqueued, false if queue is full or cannot accept new
  transactions.