The ThreadPoolExecutor accepts seven arguments governing thread lifecycle and task dispatching:
new ThreadPoolExecutor(
2, // basePoolSize
10, // ceilingPoolSize
30L, // idleThreshold
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy()
);
Resource Scaling Behavior
Worker threads divide into two categories: the permanent set (corePoolSize) and the elastic set (maximumPoolSize - corePoolSize). When task submission exceeds the core workers' processing capacity, new tasks enter workQueue. Only upon queue saturation does the pool instantiate additional threads up to the ceiling limit. Idle threads beyond the core set terminate after keepAliveTime.
Submission Processing Sequence
- If running workers <
corePoolSize, create new thread immediately - Otherwise, attempt
workQueue.offer(task) - If queue full and workers <
maximumPoolSize, spawn temporary thread - If pool at capacity, envoke
RejectedExecutionHandler
Standrad Deployment Patterns
Single-Worker Piepline
ExecutorService single = new ThreadPoolExecutor(
1, 1, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>()
);
Fixed-Width Processing
int workers = 4;
ExecutorService fixed = new ThreadPoolExecutor(
workers, workers, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>()
);
Unbounded Elasticity
ExecutorService cached = new ThreadPoolExecutor(
0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<>()
);
Backpressure Handling
The seventh parameter determines overflow behavior:
- AbortPolicy: Throws
RejectedExecutionException - CallerRunsPolicy: Delegates execution to submitting thread, providing natural throttling
- DiscardPolicy: Suppresses the task without notification
- DiscardOldestPolicy: Removes head of queue and retries submission
Temporal Scheduling
For delayed or periodic execution, utilize ScheduledThreadPoolExecutor which internally employs a DelayedWorkQueue:
ScheduledThreadPoolExecutor timer = new ScheduledThreadPoolExecutor(
2,
new ThreadPoolExecutor.DiscardOldestPolicy()
);