docs: private Queue<E> getOrCreateGroupQueue(G group) {
          Queue<E> q = getQueueByGroup(group);
          if (q == null) {
              lock.writeLock().lock();
              try {
                  q = getQueueByGroup(group);
                  if (q == null) {
                      ITrackedQueue<E> newQ = new TrackedPriorityBlockingQueue<E>();
                      if (queuesByGroup.put(group, newQ) == null) {
                          q = newQ;
      
                          GroupMetadata<G> metadata = new GroupMetadata<G>(group, 0);
                          long priority = groupPrioritizer.computePriority(metadata);
                          groupRoute.add(new GroupMetadata<G>(group, priority));
                          emptyQueues.put(group, new GroupMetadata<G>(group, priority));
                          groups.add(group);
                      } else {
                          q = queuesByGroup.get(group);
                      }
                  }
              } finally {
                  lock.writeLock().unlock();
              }
          }
          return q;
      }