Java Thread Pool with a Bounded Queue

Amir Rachum picture Amir Rachum · Jun 10, 2011 · Viewed 27.6k times · Source

I'm using java.util.concurrent's Executors class to create a fixed thread pool for running request handlers for a web server:

static ExecutorService  newFixedThreadPool(int nThreads) 

and the description is:

Creates a thread pool that reuses a fixed set of threads operating off a shared unbounded queue.

However, I am looking for thread pool implementation which will do the exact same thing, except with a bounded queue. Is there such an implementation? Or do I need to implement my own wrapper for the fixed thread pool?

Answer

lscoughlin picture lscoughlin · Jun 10, 2011

What you want to do is new your own ExecutorService, probably using ThreadPoolExecutor. ThreadPoolExecutor has a constructor which takes a BlockingQueue and to get a bounded queue you use for example ArrayBlockingQueue properly constructed for bounding. You can also include a RejectedExecutionHandler in order to determine what to do when your queue is full, or hang on to a reference to the blocking queue and use the offer methods.

Here's a mini example:

BlockingQueue<Runnable> linkedBlockingDeque = new LinkedBlockingDeque<Runnable>(
    100);
ExecutorService executorService = new ThreadPoolExecutor(1, 10, 30,
    TimeUnit.SECONDS, linkedBlockingDeque,
    new ThreadPoolExecutor.CallerRunsPolicy());