The SimpleAsyncTaskExecutor has the least configuration properties since it does not reuse any threads, but creates a new one once an execution happens. If the concurrency limit has been reached, this executor blocks all requests and puts them in a queue until a slot is available.