Kotlin
Beginner
1 min read
Coroutine Basics with launch and runBlocking
Example
import kotlinx.coroutines.*
fun main() = runBlocking {
println("Main starts on ${Thread.currentThread().name}")
// launch returns a Job
val job1 = launch {
delay(200)
println("Job 1 done on ${Thread.currentThread().name}")
}
val job2 = launch {
delay(100)
println("Job 2 done on ${Thread.currentThread().name}")
}
println("Waiting for jobs...")
job1.join() // wait for job1 to complete
// job2 likely already done
// Launch many coroutines — lightweight vs threads
val jobs = (1..50_000).map { i ->
launch {
delay(1000)
print(".")
}
}
jobs.forEach { it.join() }
println()
println("All 50,000 coroutines done!")
}
// coroutineScope — structured concurrency in a suspend function
suspend fun doWork() = coroutineScope {
val a = launch { delay(100); println("A") }
val b = launch { delay(50); println("B") }
// Both complete before doWork returns
}