Java의 정석 3판 쓰레드 실행시킬 때 왜 run()이 아닌 start()를 호출할까? main 메소드에서 run()을 호출하는 것은 쓰레드를 실행하는 게 아니라, 단순히 클래스에 선언된 메소드를 호출하는 것이다. start()는 새로운 쓰레드가 작업을 실행하기 위해 필요한 호출스택(call stack)을 만든 다음, run()을 호출해서 만든 호출스택에 run()을 맨 처음으로 올라가게 한다. 새로운 쓰레드를 생성하고 실행시킬 때마다 새로운 호출스택이 생성되고, 쓰레드가 종료되면 호출스택은 소멸된다. 1. main 메소드에서 쓰레드의 start() 호출 2. start() 새로운 쓰레드를 생성하고, 호출스택을 생성 3. 생성된 호출스택에 run()이 호출되고, 쓰레드가 독립적인 공간에서 작업 수행 4..