A thread pool is a group of pre-created threads that can be reused to execute tasks concurrently. It helps manage system resources efficiently by limiting the number of active threads.
Click to reveal answer
beginner
How do you define a custom thread pool in Spring Boot?
You create a @Bean method that returns a ThreadPoolTaskExecutor, configuring properties like core pool size, max pool size, and queue capacity.
Click to reveal answer
beginner
What does the 'corePoolSize' property control in a thread pool?
It controls the number of threads that are always kept alive in the pool, even if they are idle.
Click to reveal answer
beginner
Why is it important to configure a thread pool instead of creating new threads for each task?
Creating new threads for each task is costly and can exhaust system resources. A thread pool reuses threads, improving performance and resource management.
Click to reveal answer
intermediate
What is the role of 'queueCapacity' in a Spring Boot thread pool?
It defines how many tasks can wait in the queue before new threads are created or tasks are rejected.
Click to reveal answer
Which Spring Boot class is commonly used to create a custom thread pool?
ATaskScheduler
BThreadPoolExecutorService
CThreadPoolTaskExecutor
DExecutorServiceFactory
✗ Incorrect
ThreadPoolTaskExecutor is the standard Spring Boot class to configure thread pools.
What does setting 'maxPoolSize' in a thread pool do?
ALimits the maximum number of threads that can run concurrently
BSets the number of tasks in the queue
CDefines the minimum number of threads
DSpecifies the timeout for threads
✗ Incorrect
maxPoolSize limits how many threads can run at the same time in the pool.
If the task queue is full and the thread pool has reached maxPoolSize, what happens to new tasks?
AThey are rejected or handled by a rejection policy
BThey wait indefinitely
CThey create new threads beyond maxPoolSize
DThey are automatically canceled
✗ Incorrect
New tasks are rejected or handled by a configured rejection policy when the queue and threads are full.
Which annotation can you use to enable asynchronous method execution with a custom thread pool in Spring Boot?
A@AsyncConfig
B@EnableAsync
C@ThreadPool
D@AsyncExecutor
✗ Incorrect
@EnableAsync enables asynchronous processing and allows specifying a custom thread pool.
What is a good reason to customize the thread pool size in a Spring Boot app?
ATo disable concurrency
BTo make the app slower
CTo avoid using threads
DTo match the workload and hardware capabilities for better performance
✗ Incorrect
Customizing thread pool size helps optimize resource use and app responsiveness.
Explain how to create and configure a custom thread pool in Spring Boot.
Think about the steps to set up a reusable group of threads for tasks.
You got /4 concepts.
Describe why using a thread pool is better than creating new threads for each task in a Spring Boot application.
Consider system resources and task execution speed.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of configuring a custom thread pool in a Spring Boot application?
easy
A. To change the database connection settings
B. To control the number of threads used for asynchronous tasks
C. To modify the HTTP request timeout
D. To customize the logging format
Solution
Step 1: Understand thread pools in Spring Boot
Thread pools manage how many threads run tasks concurrently, improving performance and resource use.
Step 2: Identify the role of custom thread pools
Custom thread pools let you set limits on thread count and behavior for asynchronous processing.
Final Answer:
To control the number of threads used for asynchronous tasks -> Option B
Quick Check:
Thread pool purpose = control threads [OK]
Hint: Thread pools manage threads for async tasks [OK]
Common Mistakes:
Confusing thread pool with database or HTTP settings
Thinking thread pools affect logging
Assuming thread pools are for UI rendering
2. Which of the following is the correct way to define a custom thread pool bean in Spring Boot using Java configuration?
easy
A. @Bean public Executor taskExecutor() { return Executors.newFixedThreadPool(5); }
B. @Bean public Executor taskExecutor() { return new ThreadPoolExecutor(); }
C. @Bean public Executor taskExecutor() { return new ScheduledThreadPoolExecutor(10); }
D. @Bean public Executor taskExecutor() { return new ThreadPoolTaskExecutor(); }
Solution
Step 1: Recall Spring Boot thread pool bean creation
Spring Boot uses ThreadPoolTaskExecutor for custom thread pools, which integrates with Spring's task execution.
Step 2: Analyze options
@Bean public Executor taskExecutor() { return new ThreadPoolTaskExecutor(); } correctly returns a new ThreadPoolTaskExecutor instance, which is the recommended way.
Final Answer:
@Bean public Executor taskExecutor() { return new ThreadPoolTaskExecutor(); } -> Option D
Quick Check:
Spring thread pool bean = ThreadPoolTaskExecutor [OK]
Hint: Use ThreadPoolTaskExecutor for Spring thread pools [OK]
Common Mistakes:
Using Executors.newFixedThreadPool directly without Spring wrapper
Trying to instantiate ThreadPoolExecutor without parameters
Confusing scheduled thread pools with normal thread pools
3. Given this Spring Boot configuration snippet, what will be the maximum number of threads allowed in the pool?
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(3);
executor.setMaxPoolSize(6);
executor.setQueueCapacity(10);
executor.initialize();
return executor;
}
medium
A. 6
B. 3
C. 10
D. 13
Solution
Step 1: Understand core and max pool size
Core pool size is minimum threads kept alive; max pool size is the maximum threads allowed.
Step 2: Identify maxPoolSize value
The code sets maxPoolSize to 6, so the pool can grow up to 6 threads.
Final Answer:
6 -> Option A
Quick Check:
Max threads = maxPoolSize = 6 [OK]
Hint: Max threads = maxPoolSize property [OK]
Common Mistakes:
Confusing queue capacity with max threads
Thinking corePoolSize is max threads
Adding corePoolSize and queueCapacity incorrectly
4. What is wrong with this custom thread pool configuration in Spring Boot?
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(3);
executor.setQueueCapacity(10);
executor.initialize();
return executor;
}
medium
A. Missing @EnableAsync annotation on configuration class
B. Queue capacity cannot be set in ThreadPoolTaskExecutor
C. Core pool size is greater than max pool size, which is invalid
D. ThreadPoolTaskExecutor cannot be returned as a bean
Solution
Step 1: Check core and max pool size relationship
Core pool size must be less than or equal to max pool size; here core is 5 but max is 3, which is invalid.
Step 2: Validate other settings
Queue capacity is valid; @EnableAsync is optional but recommended; returning ThreadPoolTaskExecutor bean is correct.
Final Answer:
Core pool size is greater than max pool size, which is invalid -> Option C
Quick Check:
Core pool ≤ max pool required [OK]
Hint: Core pool size must not exceed max pool size [OK]
Common Mistakes:
Setting core pool size larger than max pool size
Assuming queue capacity is mandatory to set
Forgetting to add @EnableAsync (not always required)
5. You want to create a custom thread pool in Spring Boot that has a core pool size of 4, max pool size of 8, and a queue capacity of 20. You also want to set a thread name prefix "MyApp-" for easier debugging. Which of the following code snippets correctly implements this configuration?
hard
A. @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
}
B. @Bean
public Executor taskExecutor() {
return Executors.newFixedThreadPool(8);
}
C. @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8);
executor.setMaxPoolSize(4);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
}
D. @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("App-");
executor.initialize();
return executor;
}
Solution
Step 1: Verify core, max pool sizes and queue capacity
Core pool size 4, max pool size 8, and queue capacity 20 match the requirement in @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
}.
Step 2: Check thread name prefix correctness
@Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
} sets thread name prefix to "MyApp-" exactly as requested.
Step 3: Validate other options
@Bean
public Executor taskExecutor() {
return Executors.newFixedThreadPool(8);
} uses fixed thread pool without prefix; @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(8);
executor.setMaxPoolSize(4);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
} reverses core and max sizes (invalid); @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("App-");
executor.initialize();
return executor;
} uses wrong prefix.
Final Answer:
Option A code snippet correctly implements the required configuration -> Option A
Quick Check:
Correct sizes and prefix = @Bean
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
executor.setMaxPoolSize(8);
executor.setQueueCapacity(20);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
} [OK]
Hint: Match core, max sizes and prefix exactly [OK]
Common Mistakes:
Swapping core and max pool sizes
Using wrong thread name prefix
Using fixed thread pool instead of ThreadPoolTaskExecutor
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.