@Setup(Level.Trial)
    public void prepareChain() {
        // can't have group threads set to zero on a method, so can't handle the length of 1 case
        if (CHAIN_LENGTH < 2) {
            throw new IllegalArgumentException("Chain length must be 2 or more");
        }
        // This is an estimate, but for bounded queues if the burst size is more than actual ring capacity
        // the benchmark will hang/
        if (BURST_SIZE > QueueByTypeFactory.QUEUE_CAPACITY * CHAIN_LENGTH >> 1) {
            throw new IllegalArgumentException("Batch size exceeds estimated capacity");
        }
        // initialize the chain
        for (int i = 0; i < CHAIN_LENGTH; i++) {
            chain[i] = QueueByTypeFactory.createQueue();
        }
    }
We want to always start with an empty inbound. Iteration tear downs are synchronized.
jctools-benchmarks/src/main/java/org/jctools/jmh/latency/spsc/RingBurstRoundTripWithGroups.java