Since MSC is a concurrent state machine it's thread pool is a critical resource that is intended to run only non-blocking (busy) tasks. Since there can be thousands of services, and MSC does not know the usage pattern of each service, it's not possible to have a single large generic thread pool for everything. For this reason services that need to execute blocking tasks must use async startup and pass those tasks to another thread pool.
See the Service javadoc for more info:
http://docs.jboss.org/jbossmsc/1.0.0.GA/api/org/jboss/msc/service/Service.html