TIL

[TIL] 20240104 Java 프로세스와 쓰레드(1)

yjyj0101 2024. 1. 4. 20:16

1. 프로세스

  • 작업단위 :운영체제로부터 자원을 할당받는 작업의 단위(실행 중인 프로그램)
  • 구조 : OS가 프로세스 할당하면 프로그램 code와 data를 각 메모리 영역(stack, heap) 할당
  • 메모리 영역
    1. Stack : 지역변수, 매개변수 리턴 변수를 저장하는 공간
    2. Heap : 프로그램이 동적으로 필요한 변수를 저장하는 공간

2. 쓰레드

  • 프로세스 내에서의 코드 실행흐름,
  • 자바는 메인쓰레드가 main() 메서드를 실행시키면서 시작
  • 생성 : 프로세스가 작업중인 프로그램에서 실행요청이 들어오면 쓰레드 생성하여 명령처리
  • 자원 : 프로세스 내 여러 쓰레드가 있고, 실행을 위한 프로세스 내 주소공간이나 heap 공유, stack 할당
    • 쓰레드 종류
      1. 싱글 쓰레드 : 프로세스 안에서 하나의 쓰레드만 실행
      2. 멀티 쓰레드 :여러 개의 작업 동시에 있어서 성능이 좋아지고, 자원의 효율적인 사용                      동기화문제, 데드락문제 발생 가능성 증가

 

3. 쓰레드 사용방법

 

  (1) Thread 클래스

	public class TestThread extends Thread { -> Thread 클래스 상속
		@Override
		public void run() {
								// 쓰레드 수행작업(핵심)
			}
	}
	TestThread thread = new TestThread(); // 쓰레드 생성
	thread.start() // 쓰레드 실행

 

   (2) Runnable 인터페이스 

	public class TestRunnable implements Runnable { -> Runnable 인터페이스
		@Override
		public void run() {
								// 쓰레드 수행작업 
		}
	}
	
	Runnable run = new TestRunnable();
	Thread thread = new Thread(run); // 쓰레드 생성
	
	thread.start(); // 쓰레드 실행

 

   (3) 람다식 사용  

	public static void main(String[] args) {
		   Runnable task = () -> {
		            int sum = 0;
		            for (int i = 0; i < 50; i++) {
		                sum += i;
		                System.out.println(sum);
		    }
		    System.out.println(Thread.currentThread().getName() + " 최종 합 : " + sum);
           };