13.3.1 run()호출
- main메서드에서 run()을 호출하는 것은 쓰레드를 실행하는 것이 아니라 단순히 클래스에 선언된 메서드를 호출하는 것일 뿐
run
----------
main
13.3.2 start() 호출
- 쓰레드가 작업에 필요한 호출스택(call stack)을 생성한 다음 run()을 호출
- 호출 스택에 run()이 첫 번째로 올라가게 한다.
1) main메서드에서 start()호출
start
----------
main
2) start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택 생성
start |
---------- |
main |
3) 새로 생성된 호출스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업 수행
start |
---------- |----------
main | run
4)이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 수행
|
---------- |----------
main | run
13.3.3 main 쓰레드
- 프로그램 실행시 기본적으로 실행되는 하나의 쓰레드
- 기본적으로 생성되는 하나의 쓰레드가 main()호출
- 실행중인 사용자 쓰레드가 하나도 없을 때 프로그램 종료
run
class A {
public static void main(String[] args) throws Exception{
ThreadEx1 t1 = new ThreadEx1();
t1.start()
}
}
class ThreadEx1 extends Thread{
public void run(){
throwException();
}
public void throwException(){
try{
throw new Exception();
}catch(Exception e){
e.printStackTrace();
}
}
}
throwException
----------
run
class B {
public static void main(String[] args) throws Exception{
ThreadEx2 t2 = new ThreadEx2();
t2.run();
}
}
class ThreadEx2 extends Thread{
public void run(){
throwException();
}
public void throwException(){
try{
throw new Exception();
}catch(Exception e){
e.printStackTrace();
}
}
}
throwException
----------
run
----------
main
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 13.5 쓰레드 우선순위 (0) | 2022.08.29 |
---|---|
자바의 정석 - 13.4 싱글쓰레드와 멀티쓰레드 (0) | 2022.08.29 |
자바의 정석 - 13.2 쓰레드의 구현과 실행 (0) | 2022.08.29 |
자바의 정석 - 13.1 프로세스와 쓰레드 (0) | 2022.08.29 |
자바의 정석 - 10.3 java.time (0) | 2022.07.07 |