Foggy day
Kotlin - coroutine Scope basic 본문
class KotlinPlayGroundActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin_play_ground)
introduce()
hungry.start()
age()
//GlobalScope.launch는 thread와 비슷한 기능
// launch는 코루틴의 빌더이며 빌더를 사용하기 위해서는 scope가 필요하다
// GlobalScope는 scope중의 하나
//delay는 suspend 함수로 일시중단같은 개념, suspend 함수는 scope 안에서거나 백그라운드, 혹은 다른 suspend 함수에서만 가능
GlobalScope.launch {
delay(2000)
println("world!")
}
//sleep은 thread를 블로킹한다
thread {
Thread.sleep(1000)
println("new")
}
println("Hello!")
Thread.sleep(2000)
GlobalScope.launch {
delay(1000)
hungry.cancel()
}
}
val hungry = GlobalScope.launch {
repeat(100) {
println("I'm hungry $it")
delay(2500)
}
}
fun introduce() = runBlocking {
println("start introduce")
val name = GlobalScope.launch {
delay(3000)
println("Jin Han")
}
val name2 = GlobalScope.launch {
delay(6000)
println("Jerome")
}
//scope함수들은 실행하면 일단 모두 실행된다.
// 순서는 name2이 먼저이지만 delay 시간이 name2 = 6000, name =3000이기 때문에
//name이 3초에 호출되고, 6초에 name2가 실행된다. 그리고 곧바로 My name is가 호출되고 함수 종료료 name2.join() //
name.join() // Scope 함수에서 join을 호출하면 해당 함수가 완료될때까지 함수를 빠져나가지 않는다. 즉 여기서는 3초 delay
println("My name is")
}
//structured concurrency
// this.launch 로 실행한 scope들은 함수에 진입한 후 모두 동시에 실행된다.
fun age() = runBlocking {
//age 함수 진입 2초 후
this.launch {
delay(2000)
println("26")
}
//age 함수 진입 5초 후
this.launch {
delay(5000)
println("27")
}
//age 함수 진입 8초 후
this.launch {
age28()
}
println("My age is")
}
private suspend fun age28() {
delay(8000)
println("28")
}
}
// start introduce
// I'm hungry 1
// Jin Han
// My name is
// My age is
// I'm hungry 2
// 26
// Jerome
// I'm hungry 3
// 27
// I'm hungry 4
// 28
// Hello!
// new
// I'm hungry 5
// world!
'Kotlin' 카테고리의 다른 글
Kotlin - Coroutine concorrency example (0) | 2021.04.12 |
---|---|
Kotlin - Coroutine cancel (0) | 2021.04.10 |
Kotlin - data class destructuring (0) | 2021.04.08 |
Kotlin - Object Expressions (0) | 2021.04.08 |
Kotlin - when, for (0) | 2021.04.06 |