code: @Override
    public Object get(final ByteBuffer buf, final int position)
    {
      final WritableMemory mem = WritableMemory.wrap(buf, ByteOrder.LITTLE_ENDIAN);
      final WritableMemory region = mem.writableRegion(position, maxIntermediateSize);
      final Lock lock = stripedLock.getAt(ArrayOfDoublesSketchBuildBufferAggregator.lockIndex(position)).readLock();
      lock.lock();
      try {
        final ArrayOfDoublesUnion union = ArrayOfDoublesSketches.wrapUnion(region);
        return union.getResult();
      }
      finally {
        lock.unlock();
      }
    }
docs: This method uses locks because it can be used during indexing,
  and Druid can call aggregate() and get() concurrently
  https://github.com/apache/incubator-druid/pull/3956
  The returned sketch is a separate instance of ArrayOfDoublesCompactSketch
  representing the current state of the aggregation, and is not affected by consequent
  aggregate() calls