title: Handling multiple producers with DirectProcessor
body: <p>The javadoc for <a href="https://github.com/reactor/reactor-core/blob/master/reactor-core/src/main/java/reactor/core/publisher/DirectProcessor.java" rel="nofollow noreferrer"><code>DirectProcessor</code></a> from <a href="https://projectreactor.io/" rel="nofollow noreferrer">project reactor</a> says </p>
  
  <blockquote>
    <p>Please note, that along with multiple consumers, current implementation of DirectProcessor supports multiple producers. However, all producers must produce messages on the same Thread, otherwise <a href="https://www.reactive-streams.org/" rel="nofollow noreferrer">Reactive Streams Spec</a> contract is violated.</p>
  </blockquote>
  
  <p>Does this requirement mean that all <code>onNext</code>, <code>onError</code>, <code>onComplete</code> must be invoked on the same thread? Or does this only applies to messages that are submitted concurrently without happens-before between the submissions? Looking at the implementation of the processor, it does seem to be safe to use it from multiple threads as long as two messages are never submitted concurrently.  </p>
  
  <p>To paraphrase the question, is it safe to call <code>onNext</code> from different threads as long as there is happen-before relation between these calls? </p>