You can use multiple dispatcher threads to process region events simultaneously in a gateway sender queue for distribution between sites, or in an asynchronous event queue for distributing events for write-behind caching. You can also configure the ordering policy for dispatching those events.
By default, a gateway sender queue or asynchronous event queue uses only one dispatcher per queue. However, in some cases an application has the ability to process queued events concurrently for distribution to another GemFire site or listener. In these cases, you can configure multiple dispatcher threads for a single queue.
When you configure multiple dispatcher threads for a queue, GemFire creates an additional queue for each thread on each member that hosts the queue. To obtain the maximum throughput, you should increase the number of dispatcher threads until your network is saturated.
The following diagram illustrates a gateway sender queue that is
configured with multiple dispatcher threads.

<cache> <gateway-sender id="NY" parallel="false" remote-distributed-system-id="1" is-persistent="true" disk-store-name="gateway-disk-store" maximum-queue-memory="200" dispatcher-threads=5 order-policy="key"/> ... </cache>
Cache cache = new CacheFactory().create();
GatewaySenderFactory gateway = cache.createGatewaySenderFactory();
gateway.setParallel(false);
gateway.setPersistenceEnabled(true);
gateway.setDiskStoreName("gateway-disk-store");
gateway.setMaximumQueueMemory(200);
gateway.setDispatcherThreads(5);
gateway.setOrderPolicy(OrderPolicy.KEY);
GatewaySender sender = gateway.create("NY", "1");
sender.start();
<cache>
<async-event-queue id="sampleQueue" persistent="true"
disk-store-name="async-disk-store" parallel="false"
dispatcher-threads=5 order-policy="key">
<async-event-listener>
<class-name>MyAsyncEventListener</class-name>
<parameter name="url">
<string>jdbc:db2:SAMPLE</string>
</parameter>
<parameter name="username">
<string>gfeadmin</string>
</parameter>
<parameter name="password">
<string>admin1</string>
</parameter>
</async-event-listener>
</async-event-queue>
...
</cache>
Cache cache = new CacheFactory().create();
AsyncEventQueueFactory factory = cache.createAsyncEventQueueFactory();
factory.setPersistent(true);
factory.setDiskStoreName("async-disk-store");
factory.setParallel(false);
factory.setDispatcherThreads(5);
factory.setOrderPolicy(OrderPolicy.KEY);
AsyncEventListener listener = new MyAsyncEventListener();
AsyncEventQueue sampleQueue = factory.create("customerWB", listener);
Entry updates in the current, in-process batch are not eligible for conflation.