ex) 5GB 영상 다운로드 → 메일 전송 → 알림의 순서를 가진 로직이 있다고 했을 때 해당 작업을 순차적으로 진행하는 동안 다른 작업을 하지 못하고 다른 작업을 하면 앱이 멈추는 등의 문제가 발생할 수 있다. 다른 작업을 하고있다가 영상 다운로드가 완료됐을 때 알림이 발생하도록 하고 싶다.
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlin.concurrent.thread
// 2개의 자식 쓰레드, 그 둘을 포함하는 것이 메인 쓰레드. 총 3개의 쓰레드
// 쓰레드로 동작하기 때문에 두 쓰레드가 동시에 처리된다. 동시에 처리된다는 것은 하나의 CPU 자원을 가지고 경쟁한다는 것이다.
// 즉 1초마다 CPU 자원을 할당한 쓰레드가 먼저 실행된다는 것
// import가 안 돼있으면 빨간줄 뜸
fun main() {
thread(start = true) { // 1~10까지 1초마다 쉬면서 출력됨, import : concurrent
for(i in 1..10) {
println("Thread1: 현재 숫자는 ${i}")
runBlocking { // 1초마다 강제로 쉬게 하는 비동기 함수
launch {
delay(1000) // import : Long
}
}
}
}
thread(start = true) { // 50~60까지 1초마다 쉬면서 출력됨
for(i in 50..60) {
println("Thread2: 현재 숫자는 ${i}")
runBlocking {
launch {
delay(1000)
}
}
}
}
}
/* 결과
실행할 때마다 Thread1과 2의 출력되는 순서가 랜덤으로 다르다.
동시에 실행되지만 1초마다 쉬고 나서, CPU 자원을 할당하기 위해 경쟁할 때 조금 더 빠르게 CPU에 접근한 Tread가 자원을 할당받아서 코드를 실행하기 때문!
*/