static <E> RingBuffer<E> createMultiProducer(Supplier<E> factory,
			int bufferSize,
			WaitStrategy waitStrategy, Runnable spinObserver) {
    """
	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
    """

		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");
		}
	}
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
Create a new multiple producer RingBuffer with the specified wait strategy . <p > See {