public void run() {
                Queue<T> batchContainer = new ArrayDeque<>(batch);
                try {
                    for (int i = 0; i < interations; ++i) {
                        for (int j = 0; j < batch; j++) {
                            T t;
                            do {
                                t = source.poll(1, TimeUnit.NANOSECONDS);
                            }
                            while (t == null);
                            batchContainer.add(t);
                        }
                        do {
                            sink.fill(() -> batchContainer.poll(), batchContainer.size());
                        } while (!batchContainer.isEmpty());
                    }
                }
                catch (InterruptedException e) {
                    throw new AssertionError(e);
                }
            }
This test demonstrates a race described here: https://github.com/JCTools/JCTools/issues/339
You will need to debug to observe the spin.
jctools-core/src/test/java/org/jctools/queues/MpqSanityTestMpscBlockingConsumerExtended.java