Java 스레드의 라이프 사이클 세부 정보 및 인스턴스 코드
1. 라인의 상태
스레드가 존재하는 상태는 다음과 같습니다.
New 상태는 스레드가 생성되었지만 아직 실행이 시작되지 않은 상태입니다.이 상태는 라인을 호출하는 start () 방법을 통해 라인을 실행할 수 있습니다.
2. Runnable 상태
Runnable 상태는 실행 준비 상태라고 할 수도 있고 대기열이라고 할 수도 있습니다. 이 상태는 라인을 호출하는 start () 방법을 통해 라인을 실행할 수 있습니다.
스레드 스케줄러는 어떤 스레드를 실행할 것인지, 얼마나 실행할 것인지를 결정합니다.
3. 실행 상태
만약 하나의 라인이 실행 중이라면, 그것은 실행 상태입니다.
4. Dead 상태
일단 어떤 스레드가 Dead 상태에 들어가면 더 이상 실행할 수 없습니다.
5, Non runnable 상태
2. 스레드 스케줄러
JVM에서 스레드 스케줄러의 구현은 일반적으로 다음 두 가지 정책을 기반으로 합니다.
선점식 스케줄링 정책
시간별 스케줄링 정책 또는 Round-robin 순환 스케줄링 정책
스레드 스케줄러의 실현은 플랫폼과 무관하기 때문에 스레드의 스케줄링은 예측할 수 없다.
3. 스레드의 우선 순위
JVM은 새로 생성된 각 스레드에 우선 순위를 지정합니다.
0 레벨: 우선 순위가 가장 낮음
5 레벨: 일반 우선 순위
10레벨: 가장 높은 우선 순위
이러한 값을 저장하기 위해 스레드 클래스에는 다음과 같은 세 가지 변수가 있습니다.
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
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.