JAVA

스레드 정보와 생명주기

silver-w 2024. 10. 29. 22:06

1. 스레드 기본 정보


package thread.control;

import thread.start.HelloRunnable;

import static util.MyLogger.log;

public class ThreadInfoMain {

    public static void main(String[] args) {
        // main 스레드
        Thread mainThread = Thread.currentThread();
        log("mainThread = " + mainThread);                                  // Thread[#1,main,5,main]
        log("mainThread.threadId() = " + mainThread.threadId());            // 1
        log("mainThread.getName() = " + mainThread.getName());              // main
        log("mainThread.getPriority() = " + mainThread.getPriority());      // 5
        log("mainThread.getThreadGroup() = " + mainThread.getThreadGroup());// ThreadGroup[name=main,maxpri=10]
        log("mainThread.getState() = " + mainThread.getState());            // Runnable

        // myThread 스레드
        Thread myThread = new Thread(new HelloRunnable(), "myThread");
        log("myThread = " + myThread);                                  // Thread[#30,myThread,5,main]
        log("myThread.threadId() = " + myThread.threadId());            // 30
        log("myThread.getName() = " + myThread.getName());              // myThread
        log("myThread.getPriority() = " + myThread.getPriority());      // 5
        log("myThread.getThreadGroup() = " + myThread.getThreadGroup());// ThreadGroup[name=main,maxpri=10]
        log("myThread.getState() = " + myThread.getState());            // new

    }
}

 

  • 스레드 객체 정보 Thread[Id, name,priority,group] 
    • id : 스레드의 고유 넘버, 자동으로 배정된다.
    • name : 사용자 지정 스레드 이름, 지정하지 않으면 thread-01 등 배정이 된다. 중복가능
    • priority : 1~10, 스레드의 우선순위를 나타낸다. 운영체제에게 우선순위는 이렇다고 힌트를 주는 역할.
      • setPriority()로 우선순위를 셋팅 할 수 있다. 디폴트는 5
    • group : 스레드가 속한 스레드 그룹. 위 예제에서 myThread는 main스레드가 생성한 메서드, 관계상 main스레드가 myThread의 부모 스레드이면서 같은 그룹에 속한다.

 

2. 스레드의 생명 주기


  • 스레드 상태 (thread.getState()) : 스레드 현재 상태를 나타낸다.

NEW  스레드가 아직 시작되지 않은 상태
RUNNABLE   스레드가 실행 중이거나 실행될 준비가 된 상태이다.
운영체제의 스케줄러에 할당된 상태와 CPU에서 실제로 실행되고 있는 상태 둘다 나타낸다.
물리적으로는 나누어져있지만, 사용자 입장에서는 동시에 실행되는 것처럼 보인다.
WAITING   스레드가 다른 스레드의 특정 작업이 완료되기를 기다리는 상태
Blocked(동기화 락), Waiting(대기 상태), Timed Waiting(시간 제한 대기 상태)가 있으며,
CPU를 사용하지 않는 상태이다
TERMINATED : 스레드가 실행을 마친 상태
스레드가 정상적
으로 종료되거나, 예외가 발생하여 종료된 경우 이 상태로 들어간다.
스레드는 한 번 종료되면 다시 시작할 수 없다.

 

 


출처 : https://inf.run/NC7kS

 

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런

김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?

www.inflearn.com

 

'JAVA' 카테고리의 다른 글

스레드 인터럽트  (0) 2024.10.31
스레드 _ JOIN  (0) 2024.10.29
API - SimpleDateFormat (날짜 형식으로 포맷)  (0) 2024.10.28
스레드 생성과 실행 - Runnable  (0) 2024.10.23
스레드 생성과 실행 - 스레드 종류  (0) 2024.10.23