Reactor executes all operations using one of the schedulers. A Reactor scheduler does not belong to the java.util.concurrent API. The Java concurrent API is quite low-level, where we can initiate and control task execution. On the other hand, all tasks in a Reactor chain are executed by the Reactor engine. Consequently, we do not need a low-level API to manage task execution. Instead, Reactor offers a declarative model, which we can use to configure a Scheduler and alter the behavior of the chain execution.
Before we start to configure Reactor, let's first determine the default execution model. By default, Reactor is mostly single-threaded. The publisher and subscriber do not create additional threads for their execution. All life cycle hooks, and most operators, perform single-threaded execution. Before we jump ahead, let's build some code to validate this...