밑에 한줄요약 있음 ㅇㅅㅇ
synchronized 함수는 mutex 락이 풀릴때까지 suspend 시키지 않음
아마 Thread 를 그냥 락 시켜버리는거 같음
왜냐면 저걸 실행시키면 First 가 끝난 뒤, Second 가 실행되는데
그동안 Single2 쓰레드는 놀고있음에도 불구하고 세번째 코루틴은 실행되지 않음
Second Coroutine 은 suspend 되지 않아서 쓰레드를 점유하고 있기 때문이야
그럼 이걸 어떻게 개선을 해야하나면 synchronized 함수 말고 mutex.withLock 함수를 쓰면 최적화가 가능함
withLock 함수는 suspend 함수임. 즉 스위칭이 일어날 수 있단 뜻
실행해보면
Second Coroutine 은 더이상 뮤텍스에 의해 락이 되어있는 동안 쓰레드를 점유하지 않음
콘솔에 찍힌것처럼 First 가 돌고 있어서 뮤텍스 락 됐을 때 suspend 되기 때문에 쓰레드를 비워주게 되고
Third Coroutine Finish 가 콘솔에 찍힐 수 있게 됐음
First 가 끝나고 뮤텍스 락이 풀렸을 때 Second Coroutine 은 resume 되며 실행됨
한줄 요약: 코루틴 쓸 때 동기화 하고 싶으면 synchronized 말고 withLock, lock을 사용하자
니도 프론트 저능아?