run 직접 호출과 start는 current thread가 다르다

run()은 일반 메서드 호출이라 main stack에서 동기 실행되고 start()는 새 stack을 만듭니다.

thread.run()

current=main · 새 stack 없음 · 반환까지 대기

thread.start()

current=worker · 새 stack · main과 겹침

공통

실행되는 run 본문은 같음

핵심: 비동기 실행 여부는 클래스 이름이 아니라 어떤 메서드를 호출했는지로 판단합니다.