스레드가 만들어지고 시작되면 시작 되 자마자 실행 상태에 들어 가지 않으며 항상 실행 상태에 있지 않습니다. 수명주기 동안 "새로운", "런 가능", "런닝", "차단"및 "죽은"라는 5 개 주를 거쳐야합니다. 스레드가 생성 된 후에는 CPU를 점유하고 독립적으로 실행하는 것이 불가능합니다. 여러 스레드간에 전환해야하므로 대부분의 시간을 실행하는 것과 차단 사이에 전환됩니다.
1. 실의 상태
다음과 같이 스레드의 존재에 대한 몇 가지 다른 상태가 있습니다.
1. 새로운 상태
새로운 상태는 스레드가 생성되었지만 실행되지 않은 상태입니다. 이 상태에서는 스레드의 start () 메소드를 호출하여 스레드를 실행할 수 있습니다.
2. 실행 가능한 상태
런닝 가능한 상태를 준비 러닝 상태 또는 대기열이라고 할 수 있습니다. 이 상태는 스레드의 start () 메소드를 호출하여 스레드를 실행할 수 있습니다.
스레드 스케줄러는 실행할 스레드와 스레드가 얼마나 오래 실행되는지를 결정합니다.
3. 실행 상태
스레드가 실행되는 경우 실행중인 상태에 있습니다.
4. 죽은 지위
스레드가 죽은 상태로 들어가면 더 이상 실행할 수 없습니다.
5. 실행할 수없는 상태
Java Virtual Machine JVM은 스레드 우선 순위 및 스케줄링 원칙에 따라 스레드를 실행합니다.
2. 스레드 스케줄러
JVM에서 스레드 스케줄러의 구현은 일반적으로 다음 두 가지 전략을 기반으로합니다.
선제 일정 일정 전략 시간 공유 스케줄링 전략 또는 라운드 로빈 스케줄링 전략
스레드 스케줄러의 구현은 플랫폼 독립적이므로 스레드 예약은 예측할 수 없습니다.
3. 스레드의 우선 순위
JVM은 새로 생성 된 각 스레드에 우선 순위를 할당합니다.
레벨 0 : 이것은 최우선 순위입니다
레벨 5 : 이것은 정상 우선 순위입니다
레벨 10 : 이것은 최우선 과제입니다
이 값을 저장하기 위해 스레드 클래스에는 세 가지 해당 변수가 있습니다.
스레드는 먼저 상위 스레드의 우선 순위를 상속받습니다. 각 스레드의 기본 우선 순위는 레벨 5 (일반 우선 순위)이며 기본 스레드의 기본 우선 순위는 레벨 5입니다.
스레드의 우선 순위는 set -friority (int priority) 메소드를 통해 설정할 수 있습니다.
공개 최종 무효 SetPriority (int priority)
공개적으로 getPriority ();
사용자 정의 스레드에는 기본 스레드 이름 스레드+ 시퀀스 번호가 있고 시퀀스 번호는 0에서 시작됩니다. 예를 들어 첫 번째 스레드는 Thread0입니다.
스레드 이름은 setName (문자열 이름) 메소드를 통해 설정할 수 있으며 getName () 메소드를 사용하여 스레드 이름을 얻을 수 있습니다.
공개 최종 void setName (문자열 이름)
공개 최종 문자열 getName ().
예
아래의 예를 보자 :
package demo.ch; public class userthread는 스레드 {userthread () {super (); } userthread (문자열 이름) {super (name); } public void run () {System.out.println ( "스레드가 실행되기 시작 .."); } public static void main (string [] args) {userthread stread1 = new userthread ( "strook1"); userthread 2 = new userthread ( "Thread2"); System.out.println ( "스레드 1 초기 이름 및 우선 순위"); System.out.println ( "이름 :" + thread1.getName ()); System.out.println ( "우선 순위 :" + thread1.getPriority ()); System.out.println ( "스레드 2 초기 이름 및 우선 순위"); System.out.println ( "이름 :" + thread2.getPriority ()); System.out.println ( "우선 순위 :" + thread2.getPriority ()); System.out.println ( ""); Thread1.Set -friority (6); Thread2.set -priority (9); System.out.println ( "스레드 1 초기 이름 및 우선 순위"); System.out.println ( "이름 :" + thread1.getName ()); System.out.println ( "우선 순위 :" + thread1.getPriority ()); System.out.println ( "스레드 2 초기 이름 및 우선 순위"); System.out.println ( "이름 :" + thread2.getName ()); System.out.println ( "우선 순위 :" + thread2.getPriority ()); System.out.println ( ""); thread1.start (); Thread2.start (); for (int i = 0; i <5; i ++) system.out.println ( "메인 메소드 I 값 :"+i); }}출력 결과 :
스레드 1 초기 이름과 우선 순위 이름 : 5thread 2 초기 이름과 우선 순위 이름 : 스레드 2priority : 5thread 1 초기 이름과 우선 순위 이름 : 6thread 2 초기 이름 및 우선 순위 이름 : 9main 메소드 I 값 I 값 : 0main 방법 I 값 : 1thread 시작 .. Main Method I valeing running valeing : 3main 방법 : 3main 방법 : 3main 방법 :
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!