남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.
1. 쓰레드 호출 스택
- 쓰레드 별로 별도의 Stack Area(호출 스택), Register, Native Method Stack을 가진다.
- main 메서드 작업을 수행하는 것도 쓰레드이다.
- 실행 중인 쓰레드가 없으면 프로그램이 종료
2. 쓰레드 생성과 호출 과정
- main 메서드에서 쓰레드1의 start()를 호출
- start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택을 생성
- 새로 생성된 호출스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행
- 이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행된다.
한 쓰레드가 예외가 발생해서 종료되어도 다른 쓰레드에게 영향을 미치지 않는다.
public class ThreadEx1 {
public static void main(String[] args) {
ThreadEx1_1 t1 = new ThreadEx1_1();
t1.start();
for (int i = 0; i < 10000; i++) {
System.out.println("main 쓰레드는 동작중" + i);
}
}
}
class ThreadEx1_1 extends Thread {
@Override
public void run() {
throwException();
}
public void throwException() {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행결과
java.lang.Exception
at org.example.threading.ThreadEx1_1.throwException(ThreadEx1.java:25)
at org.example.threading.ThreadEx1_1.run(ThreadEx1.java:20)
main 쓰레드는 동작중0
main 쓰레드는 동작중1
.
.
.
main 쓰레드는 동작중9998
main 쓰레드는 동작중9999
'Programming > Java' 카테고리의 다른 글
[Java] 쓰레드(Thread) - 4(데몬 쓰레드) (0) | 2023.12.10 |
---|---|
[Java] 쓰레드(Thread) - 3(싱글쓰레드 vs. 멀티쓰레드) (0) | 2023.12.10 |
[Java] 네트워크 프로그래밍 - 2(Socket, TCP/UDP) (0) | 2023.12.10 |
[Java] 해싱과 equals() hashCode (0) | 2023.11.03 |
[Java] Comparator, Comparable 인터페이스 (0) | 2023.11.03 |