Java

[Java]_Thread start()와 run()

Ellie67 2021. 3. 22. 11:19
Java의 정석 3판

 

쓰레드 실행시킬 때 왜 run()이 아닌 start()를 호출할까?

 

main 메소드에서 run()을 호출하는 것은 쓰레드를 실행하는 게 아니라, 단순히 클래스에 선언된 메소드를 호출하는 것이다.

 

start()는 새로운 쓰레드가 작업을 실행하기 위해 필요한 호출스택(call stack)을 만든 다음, 

run()을 호출해서 만든 호출스택에 run()을 맨 처음으로 올라가게 한다.

 

새로운 쓰레드를 생성하고 실행시킬 때마다 새로운 호출스택이 생성되고, 쓰레드가 종료되면 호출스택은 소멸된다.

 

https://javafactory.tistory.com/1528

 

1. main 메소드에서 쓰레드의 start() 호출

2. start() 새로운 쓰레드를 생성하고, 호출스택을 생성

3. 생성된 호출스택에 run()이 호출되고, 쓰레드가 독립적인 공간에서 작업 수행

4. 호출스택이 2개이므로 스케줄러가 정한 순서에 따라 번갈아 가면서 실행된다.

 

(호출스택에서는 맨 위에 있는 메소드가 현재 실행 중인 메소드이고, 나머지 메소드는 대기 중임)

(호출스택이 둘 이상인 경우 맨 위에 있는 메소드이더라도 대기 상태일 수 있음 - 우선순위에 따라)

 

 

실행 중인 사용자 쓰레드가 하나도 없을 때 프로그래은 종료된다.

'Java' 카테고리의 다른 글

[Java]_Thread 쓰레드  (0) 2021.03.22