code: private void signalNotEmpty() {
          final ReentrantLock takeLock = this.takeLock;
          takeLock.lock();
          try {
              notEmpty.signal();
          } finally {
              takeLock.unlock();
          }
      }
docs: Signals a waiting take. Called only from put/offer (which do not
  otherwise ordinarily lock takeLock.)