This method sends an email without making the user wait.
Spring Boot
@Async
public void sendEmail() {
// send email without blocking main thread
}
Sample Program
This Spring Boot app runs an async task that waits 2 seconds. Meanwhile, the main thread prints messages without waiting. Finally, it prints the async task result.
Spring Boot
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
@SpringBootApplication
@EnableAsync
public class AsyncExampleApplication {
public static void main(String[] args) throws Exception {
var context = SpringApplication.run(AsyncExampleApplication.class, args);
var service = context.getBean(MyService.class);
System.out.println("Calling async method...");
CompletableFuture<String> future = service.asyncTask();
System.out.println("Doing other work while waiting...");
// Wait forasync result
System.out.println("Result: " + future.get());
}
}
@Service
class MyService {
@Async
public CompletableFuture<String> asyncTask() throws InterruptedException {
Thread.sleep(2000); // simulate long task
return CompletableFuture.completedFuture("Task completed");
}
}
OutputSuccess
Important Notes
Remember to add @EnableAsync in your main class to enable async support.
Async methods should return CompletableFuture or void.
Exceptions in async methods need special handling to avoid silent failures.
Summary
Async processing lets your app do many things at once.
Use @Async and CompletableFuture in Spring Boot to run tasks in background.
This improves speed and user experience by not blocking main work.
Practice
(1/5)
1. Why is async processing important in Spring Boot applications?
easy
A. It makes the application use more memory by duplicating tasks.
B. It forces all tasks to run one after another in sequence.
C. It allows tasks to run in the background without blocking the main thread.
D. It disables error handling for faster execution.
Solution
Step 1: Understand async processing purpose
Async processing lets tasks run separately from the main thread, so the app stays responsive.
Step 2: Identify correct behavior in Spring Boot
Spring Boot uses @Async to run methods in the background, improving speed and user experience.
Final Answer:
It allows tasks to run in the background without blocking the main thread. -> Option C
Quick Check:
Async means background tasks = B [OK]
Hint: Async means background work without blocking main thread [OK]
Common Mistakes:
Thinking async duplicates tasks unnecessarily
Believing async forces sequential execution
Assuming async disables error handling
2. Which annotation is used in Spring Boot to enable async processing on a method?
easy
A. @BackgroundTask
B. @EnableAsync
C. @AsyncMethod
D. @Async
Solution
Step 1: Recall Spring Boot async annotations
@Async is the annotation placed on methods to run them asynchronously.
Step 2: Differentiate from other annotations
@EnableAsync enables async support globally but is not placed on methods; @AsyncMethod and @BackgroundTask do not exist in Spring Boot.
Final Answer:
@Async -> Option D
Quick Check:
Method-level async annotation = A [OK]
Hint: Use @Async on methods to run them asynchronously [OK]
Common Mistakes:
Confusing @EnableAsync with @Async
Using non-existent annotations like @AsyncMethod
Applying @Async on classes instead of methods
3. What will be the output behavior of this Spring Boot method annotated with @Async?
4. Identify the error in this Spring Boot async method:
@Async
public void process() {
CompletableFuture<String> result = CompletableFuture.supplyAsync(() -> {
throw new RuntimeException("Fail");
});
System.out.println(result.get());
}
medium
A. Calling result.get() blocks the async thread, defeating async benefits.
B. Throwing RuntimeException inside supplyAsync is not allowed.
C. The method must return CompletableFuture<String>, not void.
D. Missing @EnableAsync annotation on the class.
Solution
Step 1: Analyze use of result.get()
Calling get() waits for the CompletableFuture to finish, blocking the async thread.
Step 2: Understand async best practices
Blocking defeats async purpose; exceptions inside supplyAsync are allowed and handled asynchronously.
Final Answer:
Calling result.get() blocks the async thread, defeating async benefits. -> Option A
Quick Check:
Blocking call inside async method = C [OK]
Hint: Avoid blocking calls like get() inside async methods [OK]
Common Mistakes:
Thinking exceptions inside supplyAsync are disallowed
Believing async methods must always return CompletableFuture
Forgetting to enable async globally (not always required)
5. You want to improve a Spring Boot app's responsiveness by running multiple independent tasks in parallel. Which approach best uses async processing to achieve this?
hard
A. Run all tasks sequentially in the main thread to avoid thread overhead.
B. Annotate each task method with @Async and return CompletableFuture, then combine results with CompletableFuture.allOf().
C. Use @Async but return void from all methods to simplify code.
D. Create new threads manually inside each method without @Async.
Solution
Step 1: Identify best async pattern for parallel tasks
Using @Async with CompletableFuture allows tasks to run in parallel and return results.
Step 2: Combine results properly
CompletableFuture.allOf() waits for all async tasks to finish, enabling coordinated processing.
Final Answer:
Annotate each task method with @Async and return CompletableFuture, then combine results with CompletableFuture.allOf(). -> Option B
Quick Check:
Parallel async tasks + combine results = A [OK]
Hint: Use @Async + CompletableFuture.allOf() for parallel task coordination [OK]
Common Mistakes:
Running tasks sequentially loses async benefits
Returning void loses ability to track task completion
Manually creating threads ignores Spring Boot async support
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.