code: public void addMove(int partIndex, PartitionChangeMove<Solution_> move) {
          long eventIndex = nextEventIndexMap.get(partIndex).getAndIncrement();
          PartitionChangedEvent<Solution_> event = new PartitionChangedEvent<>(
                  partIndex, eventIndex, move);
          moveEventMap.put(event.getPartIndex(), event);
          queue.add(event);
      }
docs: This method is thread-safe.
  The previous move(s) for this partIndex (if it hasn't been consumed yet), will be skipped during iteration.
  @param partIndex {@code 0 <= partIndex < partCount}
  @param move never null
  @see BlockingQueue#add(Object)