fun main() {
println("START")
newRoutine()
println("END")
}
fun newRoutine() {
val num1 = 1
val num2 = 2
println("${num1 + num2}")
}
main 루틴이 “START”를 출력하고 newRoutine 호출newRoutine은 1과 2를 계산해 3을 출력newRoutine이 종료되고 main 루틴으로 돌아옴main 루틴은 “END”를 출력하고 종료newRoutine이 종료된 후에는 1과 2가 메모리에서 사라지고 접근할 수 없게 된다.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2")
}
fun main(): Unit = runBlocking {
println("START")
launch {
newRoutine()
}
yield()
println("END")
}
suspend fun newRoutine() {
val num1 = 1
val num2 = 2
yield()
println("${num1 + num2}")
}
runBlocking
launch
suspend fun
suspend fun을 호출할 수 있다.yield도 suspend fun이다.yield()
START
END
3
main 코루틴이 runBlocking에 의해 실행되고 “START”가 출력launch에 의해 코루틴이 생기지만 newRoutine 실행은 바로 일어나지 않는다.main 코루틴 안에서 yield()가 되면 main은 newRoutine 코루틴에게 실행을 양보하여 launch가 만든 새로운 코루틴이 실행된다.newRoutine은 다시 yield()를 호출하고 main 코루틴으로 돌아온다.main 루틴은 “END”를 출력하고 종료된다.newRoutine이 종료되지 않았으니 3을 출력하고 종료된다.fun printWithThread(str: Any) {
println("[${Thread.currentThread().name}] $str")
}
println 대신 printWitThread를 적용하고 Intellij에 vm option으로 -Dkotlinx.coroutines.debug를 주게 되면 어떤 코루틴에서 실행되는지도 알 수 있다.[main @coroutine#1] START
[main @coroutine#1] END
[main @coroutine#2] 3