1. 스레드 시작 1
“자바 메모리 구조”

- 메서드 영역(Method Area): 프로그램을 실행하는 데 필요한 공통 데이터를 관리하며, 모든 영역에서 공유한다.
- 클래스 정보: 클래스의 실행 코드(Byte Code), 필드, 메서드와 생성자 등 모든 실행 코드 존재
- static 영역
static
변수들을 보관한다.
- 런타임 상수 풀: 프로그램을 실행하는 데 필요한 공통 리터럴 상수를 보관한다.
- 스택 영역(Stack Area): 자바 실행 시, 하나의 실행 스택이 생성 → 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등 포함
- 스택 프레임: 스택 영역에 쌓이는 하나의 박스. 메서드 호출 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임 제거
- 힙 영역(Heap Area): 객체(인스턴스)와 배열이 생성되는 영역. **Garbage Collection(GC)**이 이루어지는 주요 영역. 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.
“스레드 생성”
A. 스레드 생성 - Thread 상속
public class HelloThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": run()");
}
}
Thread
클래스 상속 → run()
메서드 재정의
Thread.currentThread()
를 호출하면 해당 코드를 실행하는 스레드 객체 조회 가능
Thread.currentThread().getName()
: 실행 중인 스레드의 이름을 조회
public class HelloThreadMain {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+ ": main() start");
HelloThread helloThread = new HelloThread();
System.out.println(Thread.currentThread().getName()+ ": start() 호출 전");
helloThread.start(); // start 호출 시 HelloThread가 run() 메서드를 실행 -> HelloThread에 맡기고 main에서는 다른 일을 한다!
// start() 메서드를 호출해야 run() 코드가 실행된다.
System.out.println(Thread.currentThread().getName()+ ": start() 호출 후");
System.out.println(Thread.currentThread().getName()+ ": main() end");
}
}
HelloThread
스레드 객체를 생성하고 start()
메서드 호출
start()
메서드 → 스레드 실행 메서드
start()
메서드를 호출하면 HelloThread
스레드가 run()
메서드를 호출한다.
실행 결과
main: main() start
main: start() 호출 전
main: start() 호출 후
main: main() end
Thread-0: run()
스레드 생성 전