Java 스레드의 라이프 사이클 세부 정보 및 인스턴스 코드

루틴이 생성되고 시작되면 실행에 들어간 상태도 아니고 계속 실행된 상태도 아닙니다. 라이프 사이클에서 "새로 만들기(New), 준비(Runnable), 실행(Running), 막기(Blocked), 죽음(Dead)"등 다섯 가지 상태를 거쳐야 합니다.스레드가 생성된 후에도 CPU를 차지하지 않고 독립적으로 실행할 수 없으며, 여러 스레드 사이를 전환해야 하기 때문에 대부분의 시간은 실행, 막힘 사이를 전환한다.
1. 라인의 상태
스레드가 존재하는 상태는 다음과 같습니다.
  • 새로운 상태
  • Ready 상태
  • 런닝 상태
  • 데드 상태
  • Non Runnable 상태
  • 1. New 상태
    New 상태는 스레드가 생성되었지만 아직 실행이 시작되지 않은 상태입니다.이 상태는 라인을 호출하는 start () 방법을 통해 라인을 실행할 수 있습니다.
    2. Runnable 상태
    Runnable 상태는 실행 준비 상태라고 할 수도 있고 대기열이라고 할 수도 있습니다. 이 상태는 라인을 호출하는 start () 방법을 통해 라인을 실행할 수 있습니다.
    스레드 스케줄러는 어떤 스레드를 실행할 것인지, 얼마나 실행할 것인지를 결정합니다.
    3. 실행 상태
    만약 하나의 라인이 실행 중이라면, 그것은 실행 상태입니다.
    4. Dead 상태
    일단 어떤 스레드가 Dead 상태에 들어가면 더 이상 실행할 수 없습니다.
    5, Non runnable 상태
  • 실행 중인 스레드가 Non runnable 상태로 바뀔 수 있습니다. 이것은 운행 상황에 달려 있습니다
  • 어떤 라인은 만족스러운 조건이 나타날 때까지 Non runnable 상태를 유지할 수 있다..
  • 어떤 Non runnable 상태의 라인은 운행 상태로 바로 전환할 수 없고 반드시 먼저 Runnable 상태로 전환해야 한다..
  • 수면 수면: 라인 수면이 지정한 시간..
  • I/O 장애: 장애 작업이 완료될 때까지 스레드가 기다립니다
  • join 막힘: 다른 라인이 실행될 때까지 기다립니다
  • 알림 대기: 다른 스레드의 알림을 기다립니다..
  • 자물쇠 메커니즘 막힘: 지정한 자물쇠가 풀릴 때까지 기다립니다. 자물쇠를 얻습니다.
  • Java VM JVM은 스레드의 우선 순위 및 스케줄링 원칙에 따라 스레드를 수행합니다.
    2. 스레드 스케줄러
    JVM에서 스레드 스케줄러의 구현은 일반적으로 다음 두 가지 정책을 기반으로 합니다.
    선점식 스케줄링 정책
    시간별 스케줄링 정책 또는 Round-robin 순환 스케줄링 정책
    스레드 스케줄러의 실현은 플랫폼과 무관하기 때문에 스레드의 스케줄링은 예측할 수 없다.
    3. 스레드의 우선 순위
    JVM은 새로 생성된 각 스레드에 우선 순위를 지정합니다.
    0 레벨: 우선 순위가 가장 낮음
    5 레벨: 일반 우선 순위
    10레벨: 가장 높은 우선 순위
    이러한 값을 저장하기 위해 스레드 클래스에는 다음과 같은 세 가지 변수가 있습니다.
  • public static final int MIN_PRIORITY
  • public static final int NORM_PRIORITY
  • public static final int MAX_PRIORITY
  • 하나의 스레드는 먼저 부모 스레드의 우선 순위를 계승합니다. 모든 스레드의 기본 우선 순위는 5급(Normal 우선 순위)이고 주 스레드의 기본 우선 순위는 5급입니다.
    setPriority(int priority) 방법으로 스레드의 우선순위를 설정할 수 있습니다.
    public final void setPriority(int priority)
    public void getPriority();
    기본 스레드 이름은Thread+번호이며, 첫 번째 스레드는Thread0입니다.
    스레드 이름은 setName(String name) 방법으로 설정할 수 있으며, getName () 방법으로 스레드의 이름을 얻을 수 있습니다.
    public final void setName(String name)
    public final String getName().
    인스턴스
    다음 예제를 살펴보겠습니다.
    
    package demo.ch;
    
    public class UserThread extends Thread {
      UserThread() {
        super();
      }
    
      UserThread(String name) {
        super(name);
      }
    
      public void run() {
        System.out.println("thread started running..");
      }
    
      public static void main(String[] args) {
        UserThread thread1 = new UserThread("Thread1");
        UserThread thread2 = new UserThread("Thread2");
    
        System.out.println("Thread 1 initial name and priority");
        System.out.println("name:" + thread1.getName());
        System.out.println("priority:" + thread1.getPriority());
    
        System.out.println("Thread 2 initial name and priority");
        System.out.println("name:" + thread2.getName());
        System.out.println("priority:" + thread2.getPriority());
        System.out.println("");
    
        thread1.setPriority(6);
        thread2.setPriority(9);
    
        System.out.println("Thread 1 initial name and priority");
        System.out.println("name:" + thread1.getName());
        System.out.println("priority:" + thread1.getPriority());
    
        System.out.println("Thread 2 initial name and priority");
        System.out.println("name:" + thread2.getName());
        System.out.println("priority:" + thread2.getPriority());
        System.out.println("");
    
        thread1.start();
        thread2.start();
    
        for(int i=0; i<5; i++)
          System.out.println("main method i value: " + i);
      }
    }
    
    
    출력 결과:
    
    Thread 1 initial name and priority
    name:Thread1
    priority:5
    Thread 2 initial name and priority
    name:Thread2
    priority:5
    
    Thread 1 initial name and priority
    name:Thread1
    priority:6
    Thread 2 initial name and priority
    name:Thread2
    priority:9
    
    main method i value: 0
    main method i value: 1
    thread started running..
    main method i value: 2
    thread started running..
    main method i value: 3
    main method i value: 4
    
    
    읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기