dependencies{ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") }
fun main(args: Array<String>){ println("메인 쓰레드 시작") var job = GlobalScope.launch{ delay(3000) println("여기는 코루틴...") } println("메인 쓰레드 종료") } //코루틴 실행이 끝나기 전에, 메인 쓰레드가 종료됨 -> 코루틴 실행 결과 출력 X //실행 결과: //메인 쓰레드 시작 //메인 쓰레드 종료
fun main(args: Array<String>){ println("메인 쓰레드 시작") var job = GlobalScope.launch{ delay(3000) println("여기는 코루틴...") } //job 실행이 끝날 때까지 메인 쓰레드 일시중단 runBlocking{ job.join() } println("메인 쓰레드 종료") } //코루틴 실행이 끝날 때까지 메인 쓰레드 기다림 -> 코루틴 결과 출력 O //실행 결과: //메인 쓰레드 시작 //여기는 코루틴... //메인 쓰레드 종료
fun main(args: Array<String>){ println("메인 쓰레드 시작") var job = CoroutineScope(Dispatchers.Default).launch{ delay(3000) println("여기는 코루틴...") } //job 실행이 끝날 때까지 메인 쓰레드 일시중단 runBlocking{ job.join() } println("메인 쓰레드 종료") jop.cancel() //CoroutineScope 사용 후 해제 } //실행 결과: //메인 쓰레드 시작 //여기는 코루틴... //메인 쓰레드 종료
fun main(args: Array<String>){ println("메인 쓰레드 시작") var job = CoroutineScope(Dispatchers.Default).launch{ //async를 이용해 두 작업 비동기적으로 실행 var fileDownloadCoroutine = async(Dispatchers.IO){ delay(10000) "파일 다운로드 완료" } var databaseConnectionCoroutine = async(Dispatchers.IO){ delay(5000) "데이터베이스 연결 완료" } //await()을 이용해 코루틴 실행 결과를 받을 때까지 job 일시중단 println("${fileDownloadCoroutine.await()}") println("${databaseConnectionCoroutine.await()}") } //job 실행이 끝날 때까지 메인 쓰레드 일시중단 runBlocking{ job.join() } println("메인 쓰레드 종료") jop.cancel() //CoroutineScope 사용 후 해제 } //실행 결과: //메인 쓰레드 시작 //파일 다운로드 완료 //데이터베이스 연결 완료 //메인 쓰레드 종료