안녕하세요 william입니다!
오늘은 코루틴을 알아보겠습니다!
일단 핵심 언어 살펴볼께요
코루틴 이란?
현재 상황
현재 GlobalScope로 코루틴을 생성했습니다
코루틴 내에서 delay가 3초인 함수 두개를 설정한 상태입니다
타이머에 main 쓰레드가 찍힌후 6초 후 로그에서 2개의 로그가 동시에 찍힌게 보이시나요?
delay를 3초를 했는데 왜 6초의 delay가 합쳐진것일까요?
networkCallAnswer가 networkCallAnswer2에 영향을 끼치는걸까요?
네 맞습니다!
일단 코루틴에서는 한개의 쓰레드를 공유 한다는것에 집중해야합니다!
따라서 코루틴(한개의 쓰레드)에서 함수호출후 3초의 딜레이를 하고 또 3초의 딜레이를 한후에야
Log를 찍으로 넘어갈수 있는것이죠!
그렇다면 함수호출 사이에 Log를찍으면 어떻게 될까요?
여기서는 main thread 실행후 3초후에 거의 동시에 찍힌게 보이시죠?
함수 호출후 log를 찍고 또 함수를 찍고 로그를찍고 거의 동시에 쭉쭉 나갈수있었기 때문입니다
쓰레드가 하나라는것은 Thread.currentThread().name을 통해 알수있어요!
RunBlocking
두개의 코루틴을 생성했는데 바로 launch를 했습니다
이유는 runBlocking이 이미 코루틴 스코프 이기 때문입니다!
또한 여기서는 위와 다르게 쓰레드의 이름이 다른게 보이시죠?
실행순서
Before -> (Finished1,2 delay시작) -> start -> 5초delay && 3초후Finished1,2 delay출력
-> Finished1,2 delay출력후2초후 End && After runBlocking 출력
ing....