ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | Thread (1) 개요
    JAVA/JAVA 2020. 2. 10. 17:26

    Thread 스레드

    응용 프로그램 내에서 실행되는 최소 실행 단위

    • 하나의 프로그램이 동시에 여러 개의 일을 수행할 수 있도록 함
    • 순차적으로 동작하는 문장들의 단일 집합
    • 경량 프로세스, 여러 개가 모이면 프로세스 형성
    • 자바는 스레드를 지원하기 위해 java.lang.Thread 클래스 제공
    • 톰캣 서버에서 쓰레드 단위로 요청을 처리함

    Thread 종류

    • 사용자 정의 스레드: Thread 클래스를 상속받거나 Runnable 인터페이스를 구현해서
      사용자가 직접 스레드를 생성하고 사용하는 것
    • 메인 스레드: main() 메소드를 호출해서 실행하는 역할을 하는 기본 스레드

    Thread 활용 영역

    1. 채팅 프로그램
    2. 게임
    3. 주식
    4. CPU 사용 정보 출력

    Process

    현재 실행중인 응용 프로그램의 최소 실행 단위

    • foreground process: 눈으로 확인 가능한 범위에서 진행되는 프로세스
      ex) 작업 관리자의 앱(응용 프로그램) 탭에서 확인 가능한 프로세스
    • background process: 응용 프로그램의 실행을 뒤에서 보조하는 프로세스
      ex) 작업 관리자의 백그라운드 프로세스에서 확인 가능

    Multi Tasking

    컴퓨터에서 각각의 일을 전담하는 프로그램들(여러 개의 프로세스)을 동시에 실행하는 것
    멀티 태스킹을 위해 운영체제가 취하는 방식을 멀티 프로세스 시스템이라고 함


    Scheduling

    멀티프로세스 시스템에서 각 프로세스는 동시에 실행되는 것처럼 보이지만,
    CPU가 하나이기 때문에 실행시간을 잘게 나누어 프로세스가 돌아가는데
    이렇게 각 프로세스들이 돌아가면서 CPU를 점유하며 작업하는 것을 말함


    Thread Class

    • JDK에서 java.lang.Thread 클래스 제공
    • 스레드 생성을 위해 사용

    Thread Field

    필드(멤버 변수) 설명
    static int MAX_PRIORITY 스레드가 가질 수 있는 최대 우선순위, 10
    static int MIN_PRIORITY 스레드가 가질 수 있는 최소 우선순위, 1
    static int NORM_PRIORITY 스레드에 할당된 기본 우선순위, 5

    ※ 우선순위가 높을수록 상대적으로 더 많은 작업 시간을 할당함


    Thread 주요 생성자

    생성자 설명
    Thread(String name) 스레드의 이름을 name으로 설정하면서 Thread 객체 생성
    Thread(Runnable target) Runnable 구현 클래스로 생성한 객체를 target으로 전달해서 Thread 객체 생성
    Thread(Runnable target, String name) Runnable 구현 클래스로 생성한 객체를 target으로 전달해서 Thread 객체 생성
    Thread 이름은 name으로 설정

    Thread Method

    메소드 설명
    Thread currentThread() 현재 실행중인 스레드 객체를 반환하는 정적 메소드
    String getName() 스레드 객체의 이름을 반환
    long getId() 스레드 객체의 ID 값 반환
    void setName(String name) 현재 스레드 객체의 이름을 name 값으로 변경
    void run() Thread 클래스를 상속받는 클래스에서 오버라이딩해야 하는 메소드
    해당 스레드가 실행해야할 코드를 run() 내부에 작성
    시스템 내부(운영체제)에서 호출하는 Callback 메소드이기 때문에 직접적으로 호출하면 안됨
    main Thread를 멈춘 상태에서 다른 쓰레드 가동(성능 저하)
    void start() 해당 스레드가 실행되도록 하는 메소드
    JVM이 run() 메소드를 호출함, main Thread를 유지하면서 가동
    void sleep(long millis) 현재 실행 중인 스레드가 지정 밀리초만큼 잠들도록(중지) 함
    InterruptedException 예외를 처리해야 함
    1초 = 1000 밀리초
    void setPriority(int newPriority) 현재 스레드의 우선순위를 newPriority로 변경함
    final int getPriority() 현재 스레드의 우선순위 반환

    Thread Life Cycle

    Thread는 생성~소멸까지 생명주기(Life Cycle)를 가짐

    1. Thread 객체 생성
    2. start() 호출 → run() 호출
    3. [실행 상태 ↔ 실행 가능 상태] ↔ [대기 상태] by sleep() 등의 메소드
      요즘엔 sleep() 외에는 거의 사용하지 않는다고 함
    4. 완료

    Thread의 개요와 Thread 클래스에 대해 살펴보았습니다.

    Thread는 응용 프로그램 내에서 실행되는 최소 작업 단위이며

    자바에서는 Thread를 직접 생성해서 사용할 수 있도록 하는 Thread 클래스를 지원하고 있습니다.

    다음 글에서는 Thread를 여러 개로 나누어 사용하는 멀티 스레드와 Thread 클래스를 상속받지 못할 때

    Runnable 인터페이스를 구현해서 Thread 객체를 생성하는 방법에 대해 알아보겠습니다.

     

    댓글

Designed by Tistory.