Bird
Raised Fist0
Spring Bootframework~20 mins

@EnableAsync annotation in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Async Mastery in Spring Boot
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when @EnableAsync is added to a Spring Boot configuration?
Consider a Spring Boot application where the @EnableAsync annotation is added to a configuration class. What is the effect of this annotation on the application's behavior?
AIt disables all asynchronous processing in the application.
BIt enables the processing of methods annotated with @Async to run asynchronously in a separate thread.
CIt automatically schedules all methods to run at fixed intervals.
DIt converts all synchronous methods into reactive streams.
Attempts:
2 left
💡 Hint
Think about what @Async methods need to work properly in Spring.
📝 Syntax
intermediate
2:00remaining
Identify the correct way to enable async processing in Spring Boot
Which of the following code snippets correctly enables asynchronous method execution in a Spring Boot application?
Spring Boot
public class AppConfig {
    // ...
}
A
@Configuration
@EnableAsync(true)
public class AppConfig {}
B
@EnableAsync
public class AppConfig {}
C
@Configuration
@EnableAsync()
public class AppConfig {}
D
@Configuration
@EnableAsync
public class AppConfig {}
Attempts:
2 left
💡 Hint
Remember that @EnableAsync is a meta-annotation and usually combined with @Configuration.
🔧 Debug
advanced
2:00remaining
Why does @Async not work despite @EnableAsync being present?
A developer added @EnableAsync to their Spring Boot configuration but notices that methods annotated with @Async still run synchronously. What is the most likely cause?
AThe @Async method is called from within the same class, bypassing Spring's proxy mechanism.
BThe @EnableAsync annotation must be placed on the main application class only.
CThe @Async annotation requires a special bean name to work.
DSpring Boot disables @Async by default even with @EnableAsync.
Attempts:
2 left
💡 Hint
Think about how Spring proxies work with self-invocation.
❓ state_output
advanced
2:00remaining
What thread name prefix is used by default for @Async methods?
When a method annotated with @Async runs, what is the default prefix of the thread name executing it?
ASimpleAsyncTaskExecutor-
BThreadPoolTaskExecutor-
CAsyncExecutor-
DDefaultAsyncThread-
Attempts:
2 left
💡 Hint
Look at the default executor Spring uses if none is configured.
🧠 Conceptual
expert
3:00remaining
How does @EnableAsync affect Spring's proxy creation and bean lifecycle?
Which statement best describes the impact of @EnableAsync on Spring's proxy creation and bean lifecycle?
A@EnableAsync replaces all beans with asynchronous versions at runtime without using proxies.
B@EnableAsync delays bean initialization until the first @Async method is called.
C@EnableAsync triggers Spring to create proxies for beans with @Async methods, enabling asynchronous execution by intercepting method calls.
D@EnableAsync disables Spring's default proxy mechanism to allow direct thread spawning.
Attempts:
2 left
💡 Hint
Consider how Spring intercepts method calls to add behavior.

Practice

(1/5)
1. What is the main purpose of the @EnableAsync annotation in a Spring Boot application?
easy
A. To enable automatic database transactions
B. To enable REST API endpoint scanning
C. To enable running methods asynchronously in the background
D. To enable security features like authentication

Solution

  1. Step 1: Understand what @EnableAsync does

    This annotation activates Spring's ability to run methods asynchronously, meaning in the background without blocking the main thread.
  2. Step 2: Compare with other options

    Other options relate to transactions, REST scanning, or security, which are unrelated to @EnableAsync.
  3. Final Answer:

    To enable running methods asynchronously in the background -> Option C
  4. Quick Check:

    @EnableAsync = run methods asynchronously [OK]
Hint: Remember: Enable async means run tasks in background [OK]
Common Mistakes:
  • Confusing @EnableAsync with transaction management
  • Thinking it enables REST endpoints
  • Assuming it controls security features
2. Which of the following is the correct way to enable asynchronous method execution in a Spring Boot application?
easy
A. Add @Async on configuration class and @EnableAsync on methods
B. Add @Async on the main application class only
C. Add @EnableAsync on every method you want async
D. Add @EnableAsync on a configuration class and @Async on methods

Solution

  1. Step 1: Identify correct annotation placement

    @EnableAsync must be on a configuration or main class to activate async support globally.
  2. Step 2: Mark methods with @Async

    Methods that should run asynchronously need the @Async annotation.
  3. Final Answer:

    Add @EnableAsync on a configuration class and @Async on methods -> Option D
  4. Quick Check:

    Enable async globally + mark methods async = Add @EnableAsync on a configuration class and @Async on methods [OK]
Hint: Enable async on config class, async on methods [OK]
Common Mistakes:
  • Putting @Async on the main class only
  • Using @EnableAsync on methods instead of config
  • Mixing up @Async and @EnableAsync roles
3. Given the code below, what will be the output when mainMethod() is called?
@EnableAsync
@Configuration
public class AppConfig {}

@Service
public class MyService {
  @Async
  public void asyncMethod() {
    System.out.println("Async task started");
  }

  public void mainMethod() {
    System.out.println("Main method start");
    asyncMethod();
    System.out.println("Main method end");
  }
}
medium
A. Main method start Main method end Async task started
B. Main method start Async task started Main method end
C. Async task started Main method start Main method end
D. Main method start Main method end

Solution

  1. Step 1: Understand async method behavior

    The @Async method runs asynchronously only when called from a different Spring-managed bean proxy. Calling asyncMethod() directly within the same class does NOT run asynchronously, so it executes synchronously.
  2. Step 2: Trace output order

    All print statements execute in order: "Main method start", "Async task started", then "Main method end".
  3. Final Answer:

    Main method start Async task started Main method end -> Option B
  4. Quick Check:

    Direct self-invocation bypasses async proxy, so method runs synchronously [OK]
Hint: Async methods called within same class run synchronously [OK]
Common Mistakes:
  • Assuming async prints immediately in order
  • Thinking async blocks main thread
  • Ignoring that async runs in background thread only when called via proxy
4. Consider this Spring Boot setup:
@Configuration
public class AsyncConfig {
  @Async
  public void runAsync() {
    System.out.println("Running async");
  }
}

What is the main problem with this code?
medium
A. Missing @EnableAsync annotation to activate async support
B. Methods annotated with @Async must return a value
C. @Async cannot be used inside @Configuration classes
D. The method must be static to run asynchronously

Solution

  1. Step 1: Check if async support is enabled

    Without @EnableAsync on a configuration or main class, Spring will not run @Async methods asynchronously.
  2. Step 2: Validate other options

    @Async methods can be void, can be in any Spring bean, and do not need to be static.
  3. Final Answer:

    Missing @EnableAsync annotation to activate async support -> Option A
  4. Quick Check:

    Enable async missing = async won't run [OK]
Hint: Always add @EnableAsync to activate async methods [OK]
Common Mistakes:
  • Thinking @Async needs return value
  • Believing @Async can't be in config classes
  • Assuming method must be static
5. You want to run multiple slow tasks in parallel in a Spring Boot app. Which setup correctly uses @EnableAsync and @Async to achieve this?
@Configuration
@EnableAsync
public class AsyncConfig {}

@Service
public class TaskService {
  @Async
  public CompletableFuture<String> slowTask(String name) {
    Thread.sleep(2000);
    return CompletableFuture.completedFuture(name + " done");
  }
}

// In some controller or service
public void runTasks() {
  CompletableFuture<String> t1 = taskService.slowTask("Task1");
  CompletableFuture<String> t2 = taskService.slowTask("Task2");
  CompletableFuture.allOf(t1, t2).join();
  System.out.println("All tasks completed");
}
hard
A. This setup runs slowTask methods in parallel without blocking main thread
B. This setup runs slowTask methods sequentially blocking main thread
C. Missing @Async on slowTask method, so runs sequentially
D. Missing @EnableAsync, so async calls run synchronously

Solution

  1. Step 1: Check annotations and method return type

    @EnableAsync is present to enable async support, and @Async marks slowTask to run asynchronously returning CompletableFuture.
  2. Step 2: Understand method calls and joining

    Calling slowTask twice starts both tasks in parallel threads. CompletableFuture.allOf(...).join() waits for both to finish without blocking main thread execution during tasks.
  3. Final Answer:

    This setup runs slowTask methods in parallel without blocking main thread -> Option A
  4. Quick Check:

    EnableAsync + Async + CompletableFuture = parallel tasks [OK]
Hint: Use @EnableAsync + @Async + CompletableFuture for parallel tasks [OK]
Common Mistakes:
  • Forgetting @EnableAsync disables async behavior
  • Not returning CompletableFuture causes sync execution
  • Calling async methods without waiting causes premature exit
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard