Hi Miljan
This is not a surprise and is by design. Each EventHandler is allocated a thread from the ExecutorService you provide. It is not used as a classic executor with each event submitted to the executor.
I may misunderstand, but I can't see the point in having less threads than handlers. What behaviour do you expect? If you expect the events to wait inside the WorkerPool until a thread to run the worker becomes available, then this would stall events. In this case, why not just configure less handlers in the WorkerPool as you would have the same outcome?
With respect to waste of resources - if your handlers are passing over an event very quickly, they will consumer very little CPU especially if configured with a blocking wait strategy. I don't think this would be a significant drain on your performance if configured appropriately.
Thanks
Jason