CNU SW 아카데미/4주차

[Java Thread] 자바 스레드 프로그래밍

하가네 2024. 7. 25. 20:10

 

Process vs Thread

 

Heap는 new

Static은 data

 

 

# Process

  • 실행 중인 프로그램을 의미한다.
  • 스케줄링의 대상이 되는 작업(task)과 같은 의미로 쓰인다.
  • Storage의 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고 할당된 메모리 공간으로 바이너리 코드가 올라간다.
    • 이 순간부터 process라고 불린다.
  • process는 하나 이상의 스레드 구성이 된다.

 

# Thread

  • process와 유사하지만, 메모리의 많은 부분을 공유한다.
  • Thread별로 Stack과 Register를 가지고 있음
  • Thread of Control을 줄인 말로, 제어의 흐름을 시각적으로 표현

Thread

 

 

### Single Thread

  • Main 스레드에서 작업 진행, 작업은 순차적으로 진행됨
  • 하나의 프로세스에서 오직 하나의 스레드로만 실행
    • 단일 레지스터와 스택으로 구성
    • Context Switching 작업을 요구하지 않음
    • 동시성 제어에 대한 처리를 신경 쓰지 않아도 됨

 

 

### Multi Thread

  • 프로그램 내에서 두 개 이상의 동작을 동시에 실행
    • 프로세서의 활동을 극대화
    • 두 개가 동작을 동시에 실행
  • 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유
    • 자원의 생성과 관리의 중복성 최소화
    • 수행 능력 향상

 

 

 

### Thread 클래스

  • Thread class를 확장해 thread로 동작하는 클래스를 만든다.
  • Thread class 확장을 통해 여러 작업을 동시해 실행해 확인한다.
  • Single thread 환경에서의 여러 작업을 실행하여 문제점을 확인한다.

 

Java에서 thread 지원을 위해 제공되는 class로서 이를 이용한 새로운 thread class 구현이 가능하다.

Thread class는아래와 같은 확장 또는 구현 관계를 갖는다.

 

 

 

## Runnable interface

Runnable interface의 구현을 통해 커스터마이징을 진행할 수 있다.

 

 

 

운영체제와 매우 유사한 스레드 life cycle

 

 

 

## User Thread vs Daemon Thread

  • Java에서의 thread는 user thread와 daemon thread로 나뉜다.
  • User thread는 특별히 daemon thread로 설정하지 않은 thread로서 일반적으로 생성해서 사용되는 thread이다.
  • JVM은 모든 user thread가 종료될 때까지 프로그램을 실행한다.
  • Daemon thread는 백그라운드에서 동작하는 thread로, user thread가 종료될 때 자동으로 종료된다.
  • 주로 main thread나 다른 user thread의 보조 역할을 수행하거나, 특정 작업을 주기적으로 처리하는 thread 등에 사용된다.
  • JVM은 모든 user thread가 종료되면 daemon thread를 강제로 종료한다.