I need to perform some tasks(Mostly Call multiple External URL\'s with request parameters and read data) concurrently in java servlet and send response to user within a few
Creating and destroying a thread pool for each request is a bad idea : too expensive.
If you have some way to remember which HTTP request each URL fetching task is related to, I'd go for a CachedThreadPool. Its ability to grow and shrink on-demand will do wonders, because the URL fetching tasks are totally independant and network-bound (as opposed to CPU or memory-bound).
Also, I would wrap the ThreadPool in a CompletionService, which can notify you whenever a job is done, regardless of its submission order. First completed, first notified. This will ensure you don't block on a sloooow job if faster ones are already done.
CompletionService is easy to use : wrap it around an existing ThreadPool (newCachedThreadPool for example), submit() jobs to it, and then take() the results back. Please note that the take() method is blocking.
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CompletionService.html