So the Vert.x manual describes the Multi-Reactor Pattern:
"Instead of a single event loop, each Vertx instance maintains
several event loops.
Even though a Vertx instance maintains multiple event loops, any particular handler will never be executed
concurrently, and in most cases (with the exception of
worker verticles) will always be called
using the
exact same event loop."
So if you use Vertx on a multi core machine with several event loops, handlers which share data
between one another can no longer be coded as if they were called synchronously (without volatile and locks), because they could be called by different event loops, if I understand correctly.
For example if 2 different handlers read and write to the same java.util.Map they could run concurrently because of the multiple event loops, and so the map would need to be a ConcurrentMap.
A slightly unrelated question: why are handlers always called using the same event loop?
If we've established that using multiple event loops means that handlers which interact with other handlers can't be coded as if they were synchronous, then this guarantee is no longer useful.
In fact assigning a handler to one event loop forever might cause performance issues. For example the handler for the main page of a site might be called much more than all other handlers combined and so it shouldn't be limited to 1 CPU core.