Bird
Raised Fist0
Kotlinprogramming~5 mins

RunBlocking for bridging in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is runBlocking in Kotlin coroutines?

runBlocking is a function that blocks the current thread until the coroutine inside it completes. It is mainly used to bridge regular blocking code with coroutine code.

Click to reveal answer
beginner
Why should runBlocking be used carefully in Kotlin?

Because it blocks the thread, using runBlocking in UI or main threads can freeze the app. It is best used in main functions or tests where blocking is acceptable.

Click to reveal answer
intermediate
How does runBlocking help in bridging coroutine and non-coroutine code?

runBlocking allows you to call suspend functions from regular blocking code by starting a coroutine and waiting for its result synchronously.

Click to reveal answer
intermediate
What is the difference between runBlocking and launch?

runBlocking blocks the current thread until its coroutine finishes, while launch starts a coroutine without blocking the thread.

Click to reveal answer
beginner
Show a simple example of runBlocking usage in Kotlin.
<pre>import kotlinx.coroutines.*

fun main() = runBlocking {
    println("Start")
    delay(1000L) // suspend for 1 second
    println("End")
}</pre><p>This blocks the main thread until the coroutine completes.</p>
Click to reveal answer
What does runBlocking do in Kotlin coroutines?
ACreates a new thread
BStarts a coroutine without blocking
CBlocks the current thread until the coroutine completes
DCancels all coroutines
Where is it safe to use runBlocking?
AIn main functions or tests
BInside suspend functions
CIn UI main thread of Android apps
DIn background threads only
Which of these is a key use of runBlocking?
ATo create threads
BTo launch multiple coroutines concurrently
CTo cancel coroutines
DTo bridge blocking and coroutine code
What happens if you use runBlocking on the UI thread?
AThe UI freezes until coroutine finishes
BThe coroutine runs asynchronously
CNothing special happens
DThe coroutine is cancelled immediately
Which function blocks the thread: runBlocking or launch?
Alaunch
BrunBlocking
CBoth
DNeither
Explain how runBlocking helps to bridge blocking and coroutine code in Kotlin.
Think about how you can call suspend functions from normal code.
You got /4 concepts.
    Describe the risks of using runBlocking on the UI thread and when it is appropriate to use it.
    Consider what happens when the UI thread is blocked.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of runBlocking in Kotlin coroutines?
      easy
      A. To create a new thread for running coroutines
      B. To launch a coroutine without blocking the current thread
      C. To cancel running coroutines immediately
      D. To bridge blocking code and coroutine code by blocking the current thread until coroutine completes

      Solution

      1. Step 1: Understand the role of runBlocking

        runBlocking is designed to bridge blocking and coroutine code by blocking the current thread until the coroutine inside it finishes.
      2. Step 2: Compare with other coroutine builders

        Unlike launch or async, runBlocking blocks the thread, making it suitable for main functions or tests but not for UI or performance-critical code.
      3. Final Answer:

        To bridge blocking code and coroutine code by blocking the current thread until coroutine completes -> Option D
      4. Quick Check:

        runBlocking blocks thread until coroutine finishes = C [OK]
      Hint: runBlocking blocks thread until coroutine finishes [OK]
      Common Mistakes:
      • Thinking runBlocking launches coroutine without blocking
      • Confusing runBlocking with launch or async
      • Assuming runBlocking creates a new thread
      2. Which of the following is the correct syntax to use runBlocking in Kotlin?
      easy
      A. runBlocking[ println("Hello") ]
      B. runBlocking() -> println("Hello")
      C. runBlocking { println("Hello") }
      D. runBlocking => { println("Hello") }

      Solution

      1. Step 1: Recall runBlocking syntax

        runBlocking is a function that takes a lambda block inside curly braces to run coroutine code.
      2. Step 2: Identify correct syntax

        runBlocking { println("Hello") } uses curly braces correctly with a lambda block. Other options use invalid syntax like parentheses with arrow or square brackets.
      3. Final Answer:

        runBlocking { println("Hello") } -> Option C
      4. Quick Check:

        runBlocking uses curly braces for lambda = A [OK]
      Hint: runBlocking uses curly braces for coroutine block [OK]
      Common Mistakes:
      • Using parentheses instead of curly braces
      • Using arrow or square brackets incorrectly
      • Missing lambda block inside runBlocking
      3. What will be the output of the following Kotlin code?
      import kotlinx.coroutines.*
      fun main() = runBlocking {
          launch {
              delay(100)
              println("World")
          }
          println("Hello")
      }
      medium
      A. Hello\nWorld
      B. World\nHello
      C. Hello
      D. World

      Solution

      1. Step 1: Understand runBlocking and launch behavior

        runBlocking blocks the main thread until all coroutines inside complete. The launch coroutine delays 100ms before printing "World".
      2. Step 2: Trace the print statements

        "Hello" is printed immediately in runBlocking, then after 100ms delay, "World" is printed by the launched coroutine.
      3. Final Answer:

        Hello World -> Option A
      4. Quick Check:

        runBlocking waits; launch delays; prints Hello then World = D [OK]
      Hint: runBlocking waits; launch delays; prints Hello then World [OK]
      Common Mistakes:
      • Assuming launch runs immediately before println("Hello")
      • Ignoring delay effect
      • Thinking runBlocking does not wait for launch
      4. Identify the error in this Kotlin code using runBlocking:
      fun main() {
          runBlocking {
              delay(1000)
              println("Done")
          }
      }
      medium
      A. runBlocking cannot be used inside main function
      B. Missing import for delay function
      C. delay cannot be called inside runBlocking
      D. println should be outside runBlocking

      Solution

      1. Step 1: Check for necessary imports

        The delay function is part of kotlinx.coroutines package and requires import kotlinx.coroutines.delay.
      2. Step 2: Verify usage of runBlocking and delay

        runBlocking can be used inside main, and delay is allowed inside runBlocking coroutine scope, so no error there.
      3. Final Answer:

        Missing import for delay function -> Option B
      4. Quick Check:

        delay needs import kotlinx.coroutines.delay = A [OK]
      Hint: Import kotlinx.coroutines.delay to use delay inside runBlocking [OK]
      Common Mistakes:
      • Thinking runBlocking can't be used in main
      • Assuming delay is a blocking call
      • Placing println outside runBlocking unnecessarily
      5. You want to write a Kotlin main function that prints numbers 1 to 3 with a 500ms delay between each, using runBlocking. Which code correctly achieves this?
      hard
      A. fun main() = runBlocking { for (i in 1..3) { delay(500) println(i) } }
      B. fun main() { for (i in 1..3) { delay(500) println(i) } }
      C. fun main() = runBlocking { (1..3).forEach { launch { delay(500); println(it) } } }
      D. fun main() { (1..3).forEach { Thread.sleep(500) println(it) } }

      Solution

      1. Step 1: Understand runBlocking usage for sequential delay

        fun main() = runBlocking { for (i in 1..3) { delay(500) println(i) } } uses runBlocking once and delays inside a for loop, printing numbers sequentially with 500ms delay.
      2. Step 2: Analyze other options

        fun main() { for (i in 1..3) { delay(500) println(i) } } lacks a coroutine scope, so delay() will not compile. fun main() = runBlocking { (1..3).forEach { launch { delay(500); println(it) } } } launches coroutines concurrently, printing numbers out of order. fun main() { (1..3).forEach { Thread.sleep(500) println(it) } } uses Thread.sleep, which blocks thread but not coroutine style.
      3. Final Answer:

        fun main() = runBlocking { for (i in 1..3) { delay(500) println(i) } } -> Option A
      4. Quick Check:

        runBlocking with sequential delay in loop = B [OK]
      Hint: Use runBlocking once with delay inside loop for sequential prints [OK]
      Common Mistakes:
      • Using runBlocking inside loop repeatedly
      • Launching coroutines without waiting
      • Using Thread.sleep instead of delay in coroutines
      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