September 28, 2020
fun main() {
GlobalScope.launch {
delay(1000)
println("World!")
}
// Thread { // 결과는 같음
// Thread.sleep(1000)
// println("World!")
// }
println("Hello, ")
Thread.sleep(2000) // 2초동안 해당 Thread(Main thread) 잠재움
// Hello, World!
}
.launch
와 같은 속성들을 코루틴 빌더라고 하며, 해당 코루틴 빌더 이후 중괄호 내부에서 코루틴이 실행된다.GlobalScope : 수명주기가 프로그램 전체(프론트단에서 GO)로, 해당 앱이 종료될때까지 작동된다.
Thread
(별도의 프로그램 진행 코어)라 볼 수 있다.fun main(){
GlobalScope.launch {
delay(1000)
println("World!")
}
println("Hello, ")
runBlocking {
delay(2000)
}
println("runBlocking End")
// Hello, World!
// runBlocking End
}
GlobalScope : 수명주기가 프로그램 전체(프론트단에서 GO)로, 해당 앱이 종료될때까지 작동된다.
Thread
(별도의 프로그램 진행 코어)라 볼 수 있다.fun main() = runBlocking {
GlobalScope.launch {
delay(1000)
print("World!")
}
println("Hello, ")
delay(2000)
}
// Hello, World!
fun main() = runBlocking {
val job = GlobalScope.launch {
delay(1000)
println("World!")
}
println("Hello, ")
job.join()
}
// Hello, World!
fun main() = runBlocking {
// this는 생략가능
this.launch {
delay(1000)
println("Kotlin ")
}
this.launch {
delay(2000)
println("with ")
}
this.launch {
delay(3000)
println("Coroutine ")
}
this.launch {
delay(4000)
println("World!")
}
println("Hello, ")
}
// Hello, Kotlin with Coroutine World!
fun main() = runBlocking {
var text = "banana "
launch {
delay(2000)
text = "Chicken "
}.join()
launch {
delay(1500)
text+="is delicious"
}.join()
println(text)
}
// Chicken is delicious!
fun main() = runBlocking {
launch {
doWorld()
println("World!")
}
println("Hello, ")
}
suspend fun doWorld() {
delay(1000)
println("Kotlin ")
}
// Hello, Kotlin World!
fun main() = runBlocking {
repeat(100_000){
launch {
delay(1000)
println(".")
}
}
}
// ................
코루틴은 매우 가볍다.
fun main() = runBlocking {
GlobalScope.launch {
repeat(1000){i ->
println("I'm sleeping $i ...")
delay(500)
}
}
delay(1300)
}
// I'm sleeping 0 ... I'm sleeping 1 ... I'm sleeping 2 ... 종료
fun main() = runBlocking {
launch {
repeat(5) {
println("Coroutine A, $it")
}
}
launch {
repeat(5) {
println("Coroutine B, $it")
}
}
println("Coroutine Outer")
}
fun <T>println(msg : T) {
kotlin.io.println("$msg [${Thread.currentThread().name}]")
}
// Coroutine A, 0 [main] ...