2. 멀티스레드 - 스레드 생성과 실행

희운·2025년 7월 17일

멀티스레드 (java)

목록 보기
1/5

자바 메모리 구조

메서드 영역(Method Area) : 프로그램을 실행하는데 필요한 공통 데이터 관리. 이 영역은 프로그램의 모든 영역에서 공유한다.

  • 클래스 정보 : 클래스의 실행 코드, 필드 , 메서드와 생성자 코드등 모든 실행 코드가 존재한다.
  • stati 영역 : static 변수들을 보관한다.
  • 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다.

스택 영역(Stack Area) : 자바 실행시 , 하나의 실행 스택이 생성된다. 각 스택 프레임은 지역변수 , 중간 연산 결과 , 메서드 호출 정보등을 포함한다. 지역변수에 인스턴스 참조값을 가지고 있다.

  • 스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임이다. 메서드를 호출할 때 마다 하나의 스택 프레임이 위에 쌓이고 , 메서드가 종료되면 위에서 스택 프레임이 제거된다.

힙 영역(Heap Area) : 객체(인스턴스) 와 배열이 생성되는 영역이다. 가비지 컬렉션(GC) 가 이루어지는 주요 영역이며 , 더이상 참조하지 않는 객체는 GC 에 의해서 제거된다고 생각하면 된다.

뒤에서 적겠지만 , 스택 영역은 스레드별로 하나의 실행 스택이 생성된다. 따라서 스레드 수 만큼 스택이 생성된다. 지금은 스레드를 1개만 적용하므로 스택도 하나이다. 이후 스레드를 추가할 것인데, 그러면 스택도 스레드 수 만큼 증가한다.

import static util.MyLogger.*;
  public class ManyThreadMainV1 {
      public static void main(String[] args) {
          log("main() start");
          HelloRunnable runnable = new HelloRunnable();
          
          Thread thread1 = new Thread(runnable);
          thread1.start();
          
          Thread thread2 = new Thread(runnable);
    	  thread2.start();
          
    	  Thread thread3 = new Thread(runnable);
    	  thread3.start();
          
    	  log("main() end");
    }
}

여기서 thread.start() 는 해당 스레드에게 작업을 시작하라고 명령을 하는것이다.
main 스레드는 아래코드를 진행 , thread 도 run() 메서드를 실행한다.
멀티스레드 형태로 작업을 한다.
여기서 중요한거는 main, thread1, thread2, thread3 각자 자기 맡은 코드를 수행을한다.

각각의 Thread 는 개별적으로 스택영역을 하나씩 가지고있다.

profile
기록하는 공간

0개의 댓글