Bird
Raised Fist0
Spring Bootframework~5 mins

@Async for async methods in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the @Async annotation do in Spring Boot?
It marks a method to run asynchronously, meaning the method runs in a separate thread without blocking the caller.
Click to reveal answer
beginner
How do you enable @Async support in a Spring Boot application?
Add <code>@EnableAsync</code> annotation to a configuration class or the main application class.
Click to reveal answer
intermediate
What type of return values can an @Async method have?
It can return void, CompletableFuture, Future, or ListenableFuture to handle async results.
Click to reveal answer
intermediate
Why should @Async methods be called from a different bean or class?
Because Spring proxies the bean to run async methods; calling <code>@Async</code> method from the same class bypasses the proxy and runs synchronously.
Click to reveal answer
advanced
What happens if an exception is thrown inside an @Async method?
The exception is not propagated to the caller thread. You need to handle exceptions inside the async method or use a custom AsyncUncaughtExceptionHandler.
Click to reveal answer
Which annotation enables asynchronous method execution in Spring Boot?
A@AsyncSupport
B@AsyncMethod
C@AsyncEnabled
D@EnableAsync
What must you do to make a method run asynchronously using @Async?
AAnnotate the method with @Async
BCall the method from the same class
CReturn a String from the method
DUse @Async on the class only
What is a common return type for an @Async method to handle results?
AString
BCompletableFuture
Cint
Dvoid only
Why might calling an @Async method from the same class not run asynchronously?
ABecause Spring proxies are bypassed in same-class calls
BBecause @Async only works on static methods
CBecause the method must be private
DBecause @Async requires a return value
How can you handle exceptions thrown in an @Async method?
AUse @ExceptionHandler on the method
BExceptions automatically propagate to caller
CUse AsyncUncaughtExceptionHandler or handle inside the method
DExceptions are ignored silently
Explain how to set up and use @Async in a Spring Boot application.
Think about enabling async support, marking methods, and calling them properly.
You got /5 concepts.
    Describe why calling an @Async method from the same class does not run it asynchronously and how to fix it.
    Consider how Spring manages async calls with proxies.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of using @Async in a Spring Boot application?

      easy
      A. To secure methods with authentication
      B. To make methods run faster by optimizing CPU usage
      C. To automatically retry failed methods
      D. To run methods in the background without blocking the main thread

      Solution

      1. Step 1: Understand what @Async does

        @Async allows methods to run in a separate thread, so they don't block the main thread.
      2. Step 2: Identify the main benefit

        This helps keep the app responsive by running long tasks in the background.
      3. Final Answer:

        To run methods in the background without blocking the main thread -> Option D
      4. Quick Check:

        Background execution = To run methods in the background without blocking the main thread [OK]
      Hint: Async means background task, not faster or secure [OK]
      Common Mistakes:
      • Thinking @Async speeds up method execution
      • Confusing @Async with security annotations
      • Assuming @Async retries failed methods automatically
      2.

      Which annotation must be added to a Spring Boot configuration class to enable @Async support?

      easy
      A. @EnableAsync
      B. @EnableScheduling
      C. @AsyncSupport
      D. @EnableAsyncSupport

      Solution

      1. Step 1: Recall the enabling annotation for async

        Spring Boot requires @EnableAsync on a configuration class to activate async processing.
      2. Step 2: Confirm the exact annotation name

        The correct annotation is @EnableAsync, not any other variant.
      3. Final Answer:

        @EnableAsync -> Option A
      4. Quick Check:

        Enable async = @EnableAsync [OK]
      Hint: Enable async with @EnableAsync, not similar names [OK]
      Common Mistakes:
      • Using @EnableScheduling instead of @EnableAsync
      • Guessing annotation names without checking docs
      • Confusing @Async with enabling annotations
      3.

      Consider this Spring Boot method annotated with @Async:

        @Async
        public CompletableFuture<String> fetchData() {
          return CompletableFuture.completedFuture("Done");
        }

      What will be the output if you call fetchData().get()?

      medium
      A. It blocks until the async task completes and returns "Done"
      B. It throws a NullPointerException
      C. It returns "Done" immediately
      D. It returns null because async methods don't return values

      Solution

      1. Step 1: Understand CompletableFuture with @Async

        The method returns a CompletableFuture that completes immediately with "Done".
      2. Step 2: Calling get() on CompletableFuture

        Calling get() blocks the caller until the async task finishes and then returns the result.
      3. Final Answer:

        It blocks until the async task completes and returns "Done" -> Option A
      4. Quick Check:

        CompletableFuture.get() blocks and returns result [OK]
      Hint: CompletableFuture.get() waits for async result [OK]
      Common Mistakes:
      • Assuming async methods return immediately without blocking on get()
      • Thinking async methods can't return values
      • Confusing exceptions with null returns
      4.

      Given this Spring Boot service method:

        @Async
        public void process() {
          System.out.println("Start");
          throw new RuntimeException("Error");
        }

      What happens when process() is called?

      medium
      A. The exception is thrown on the caller thread immediately
      B. The exception is logged but does not affect the caller thread
      C. The method runs synchronously and throws the exception normally
      D. The exception is ignored silently

      Solution

      1. Step 1: Understand exception handling in @Async methods

        Exceptions in async methods run in a separate thread and do not propagate to the caller.
      2. Step 2: What happens to the exception?

        The exception is logged by Spring but does not crash or throw on the caller thread.
      3. Final Answer:

        The exception is logged but does not affect the caller thread -> Option B
      4. Quick Check:

        Async exceptions logged, caller unaffected [OK]
      Hint: Async exceptions don't throw on caller thread [OK]
      Common Mistakes:
      • Expecting exceptions to propagate to caller immediately
      • Thinking async methods run synchronously
      • Assuming exceptions are ignored silently
      5.

      You want to run two independent tasks asynchronously and wait concurrently for both to finish before proceeding. Which approach using @Async and CompletableFuture is correct?

        @Async
        public CompletableFuture<String> taskOne() { ... }
      
        @Async
        public CompletableFuture<String> taskTwo() { ... }
      
        public void runTasks() throws Exception {
          CompletableFuture<String> future1 = taskOne();
          CompletableFuture<String> future2 = taskTwo();
          // What to do here?
        }
      hard
      A. Just call taskOne() and taskTwo() without waiting
      B. Call future1.get() and future2.get() sequentially to wait
      C. Use CompletableFuture.allOf(future1, future2).join() to wait both
      D. Call future1.complete() and future2.complete() manually

      Solution

      1. Step 1: Understand waiting for multiple async tasks

        Calling get() sequentially works but is inefficient and blocks one after another.
      2. Step 2: Use CompletableFuture.allOf for parallel waiting

        CompletableFuture.allOf(future1, future2).join() waits for both tasks to complete concurrently.
      3. Final Answer:

        Use CompletableFuture.allOf(future1, future2).join() to wait both -> Option C
      4. Quick Check:

        Wait all async tasks with allOf().join() [OK]
      Hint: Use allOf().join() to wait multiple async tasks together [OK]
      Common Mistakes:
      • Calling get() sequentially causing unnecessary blocking
      • Not waiting at all and proceeding too early
      • Trying to manually complete futures which is incorrect
      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