Executors need bounded capacity and an explicit shutdown owner. Unbounded queues can accumulate work faster than it is processed.
Before you start
You should know Java classes, methods, collections and exceptions. Trace object identity separately from the contents of an object. For concurrent examples, state which thread owns or shares the data; a single successful execution is not proof that every interleaving is safe.
The practical goal is to reason through this situation: A service stops accepting tasks and waits a limited time for submitted work. Read the walkthrough first, then try the interview exercise before opening its answer. The important part is explaining the decision and its consequences, rather than remembering a definition alone.
Step-by-step walkthrough
Step 1: Bound incoming work
Choose queue and worker limits plus an overload response.
Step 2: Stop admission
Shutdown prevents new tasks but does not prove existing tasks finished.
Step 3: Apply a completion deadline
Await termination for a bounded duration and define escalation or cancellation policy.
Worked scenario
A service stops accepting tasks and waits a limited time for submitted work.
A task service receives work faster than two workers can process it. An unbounded queue converts load into growing memory and delay. A bounded queue makes overload visible through rejection or another explicit policy; shutdown must still handle queued and active tasks with a deadline.
Common mistake
Shutdown does not mean every task has already finished.
Verify the behavior
Test saturation, rejection, cooperative cancellation and a task that does not finish promptly.
Interview exercise
Handle overload in a task service.
Answer and reasoning
Choose queue limits and rejection behavior, monitor wait time and define cancellation and shutdown deadlines.
Continue learning
Compare the scenario with the Java interview questions and test your understanding with the Java MCQs. For terminology and implementation details, consult the reference material.