reactor-core/src/main/java/reactor/core/publisher/RingBuffer.java
static <E> RingBuffer<E> createMultiProducer(Supplier<E> factory,
			int bufferSize,
			WaitStrategy waitStrategy, Runnable spinObserver) {

		if (hasUnsafe()) {
			MultiProducerRingBuffer sequencer = new MultiProducerRingBuffer(bufferSize, waitStrategy, spinObserver);

			return new UnsafeRingBuffer<>(factory, sequencer);
		}
		else {
			throw new IllegalStateException("This JVM does not support sun.misc.Unsafe");
		}
	}
static <E> RingBuffer<E> createMultiProducer(Supplier<E> factory,
			int bufferSize,
			WaitStrategy waitStrategy, Runnable spinObserver) {

		if (hasUnsafe()) {
			MultiProducerRingBuffer sequencer = new MultiProducerRingBuffer(bufferSize, waitStrategy, spinObserver);

			return new UnsafeRingBuffer<>(factory, sequencer);
		}
		else {
			throw new IllegalStateException("This JVM does not support sun.misc.Unsafe");
		}
	}
Create a new multiple producer RingBuffer with the specified wait strategy.
<p>See {@code MultiProducerRingBuffer}.
@param <E> the element type
@param factory used to create the events within the ring buffer.
@param bufferSize number of elements to create within the ring buffer.
@param waitStrategy used to determine how to wait for new elements to become available.
@param spinObserver the Runnable to call on a spin loop wait
@return the new RingBuffer instance