The usage of schedulers (or more genericly, ExecutorServices), would indeed help a long way into solving the Achilles’ Heel problem. Openfire does make use of such constructs, but this can (and should) be improved.
Most likely, implemented Openfire functionality should be grouped into individual parts. Each of such a part should then be assigned a set of resources (don’t limit these to schedulers/cpu-related resources alone. Other resources such as database access might be of interest too!). The assigned resources should then be made available in some way to the implementation parts.
I feel that the interesting part of this proposal would not be the introduction of schedulers, but finding a way to make sure that every scheduled task is finite, does so in a timely manner, does so without breaking functionality, and does not exhaust its available resources (or at least, make sure that exhausting resources in one part does not affect other parts of the system).
I’m be interest in your proposal!