import kotlinx.coroutines.*
fun main() {
runBlocking{
println("Weather forecast")
delay(1000)
println("Sunny")
}
}
runBlocking 함수는 동기식으로 람다식 안에 있는 모든 작업이 완료되어야 함수를 반환합니다.
import kotlinx.coroutines.*
fun main() {
runBlocking {
println("Weather forecast")
launch{
printForecast()
}
launch{
printTemperature()
}
}
}
suspend fun printForecast() {
delay(1000)
println("Sunny")
}
suspend fun printTemperature() {
delay(1000)
println("30\u00b0C")
}
printForecast()와 printTemperature()가 별개의 코루틴에 있으므로 동시에 실행할 수 있습니다.
fun main() {
thread(start = true) {
for(i in 1..10) {
println("Thread1: 현재 숫자는 ${i}")
runBlocking {
launch {
delay(1000)
}
}
}
}
thread(start = true) {
for(i in 50..60) {
println("Thread2: 현재 숫자는 ${i}")
runBlocking {
launch {
delay(1000)
}
}
}
}
}
위 코드를 실행하게 되면 두 개의 쓰레드가 실행되면서 1 ~ 10, 50 ~ 60 이 동시에 1초 간격으로 출력된다.
print("Start...")
GlobalScope.launch(Dispatchers.Main) {
val job1 = async(Dispatchers.IO) {
var total = 0
for (i in 1..10) {
total += i
delay(100)
}
print("job1")
total
}
val job2 = async(Dispatchers.Main) {
var total = 0
for (i in 1..10) {
delay(100)
total += i
}
print("job2")
total
}
val result1 = job1.await()
val result2 = job2.await()
print("results are $result1 and $result2")
}
print("End.")
v: Start...
v: Eed.
v: job1
v: job2
v: results are 55 and 55
Dispatchers.Main, Dispatchers.IO는 각각 UI 변경 등을 처리하는 메인 스레드 그리고 입출력 연산을 처리하기에 적합한 IO 스레드를 의미하며, 코루틴들은 이처럼 지정된 스레드 내에서 실행된다.