The Java platform is designed from the ground to support concurrent programming, with basic concurrency support in the Java programming language and the Java class libraries. Application servers, however, maintain a pool of worker threads available, rather than creating a thread for every request. This improves performance because thread creation (as well as destruction) does have a significant overhead that is better avoided, especially if your application creates many short-lived threads.
A second advantage of maintaining threads in a pool is that you can control (and possibly limit) the number of threads in your application. Without a centralized pool manager, your system will be heavily dependent on the client requests. Suppose you are running a heavy-duty EJB application that manages about 5,000 requests at the same time. If the number of requests goes up to 10,000, then your system will not be prepared to handle so much load and therefore is likely to crash.
Using...