Probably, having a single
thread pool for all the services will not be a great idea. The primary reason being that you will not be able to prioritize a service over others i.e. if you have a service that has more and important tasks and another one that has less but time consuming tasks. Then, it may so happen that the time consuming tasks are ahead in the queue and the thread pool threads are busy processing them.
However, the important tasks are behind in the queue and does not get processed fast enough.
Of course, if you do not have such a requirement then you might as well use a single executor.
Starting and stopping executor for a single request is not at all a good idea.
Typically, most of the applications start the executors at startup and shutdown at the application stop(if you can hook on to such events) or a user action.
Injecting the executor in the service class is a good idea.
Alternatively, you can create a registry of executors that the service class can query.
Of course, this will bring a bit of tight coupling between service class and the registry.