스레드 구현
Java에서는 실행 메소드가 스레드에 대한 실행 메소드를 제공하는 두 가지 기술이 있습니다.
1. 스레드 클래스를 상속하고 실행 메소드를 재정의하십시오. 그런 다음이 서브 클래스의 객체를 작성하고 start () 메소드를 호출하십시오.
2. 런닝 가능한 인터페이스를 구현하는 클래스를 정의한 다음 실행 메소드를 구현하십시오. 이 클래스의 객체는 스레드를 만들 때 매개 변수로 전달되며 start () 메소드가 호출됩니다.
스레드 클래스는 스레드를 생성하고 스레드에서 작동하는 데 특별히 사용되는 클래스입니다. 클래스가 스레드 클래스를 상속하면 클래스를 스레드 클래스라고합니다.
두 방법 모두 스레드의 시작 () 메소드를 실행하려면 필요한 시스템 리소스를 스레드에 할당하고 스레드를 실행할 예정 및 스레드의 run () 메소드를 실행해야합니다.
start () 메소드는 스레드를 시작하는 유일한 방법입니다. start () 메소드는 먼저 스레드 실행을 위해 시스템 리소스를 준비한 다음 run () 메소드를 호출합니다. 스레드는 한 번만 시작할 수 있으며 다시 시작하는 것은 불법입니다.
스레드의 작업은 run () 메소드, 즉 우리 가이 스레드가하고자하는 모든 것들에 넣습니다. 기본적으로 run () 메소드는 아무것도 수행하지 않습니다.
특정 응용 분야에서 스레드를 구성하는 방법은 상황에 따라 다릅니다. 일반적으로 스레드가 다른 클래스를 물려받은 경우, 두 번째 방식으로, 즉 런닝 가능한 인터페이스를 구현해야합니다.
다음은 스레드의 두 가지 구현 방법을 설명하기위한 두 가지 예입니다.
public streldtest1 {public static void main (stread1) {new Thread2 (); {@override public void run () {for (int i = 0; i <100; ++ i) { "hello world :" +i)} class thread2 스레드 {@override public void run () {for (int i = 0; i <100; ++ i) {System.out.println ( "환영 :" +i)} public stroom void main (string [string); args) {// 스레드를 구현하는 방법은 익명 내부 클래스 스레드를 사용할 수 있습니다 .start ();}} 클래스 Mythread1은 runnable {@override public void run () {for (int i = 0; i <100; ++ i) {system.out.println ( "hello :" +i); }}} class mythread2는 runnable {@override public void run () {(int i = 0; i <100; ++ i) {system.out.println ( "환영 :" +i);
스레드 클래스 분석
스레드 클래스는 또한 Runnable 인터페이스를 구현하므로 인터페이스에서 run () 메소드를 구현합니다.
스레드 개체를 생성 할 때 이름이 지정되지 않은 경우 스레드 객체의 이름은 다음과 같은 형식입니다. 스레드 번호는 자동으로 증가하고 정적 멤버이기 때문에 모든 스레드 오브젝트가 공유합니다. 변수.
스레드 객체를 생성하기 위해 첫 번째 메소드 (스레드 상속)를 사용하는 경우 스레드 클래스의 run () 메소드가 현재 아무것도하지 않기 때문에 run () 메소드를 무시해야합니다.
스레드 객체를 생성하기 위해 두 번째 메소드 (실행 가능한 인터페이스를 구현하는 방법)를 사용하는 경우 런닝 가능한 인터페이스의 run () 메소드를 구현 한 다음 새 스레드 (new MyrunnableClass ())를 사용하여 스레드 개체 (myrunnableClass를 생성해야합니다. runnable을 구현했습니다.
스레드를 중지하십시오
스레드의 소멸은 stop () 명령을 호출하여 수행 할 수 없지만 run () 메소드를 자연스럽게 끝내도록합니다. STOP () 방법은 안전하지 않으며 버려졌습니다.
스레드를 중지하는 권장 방법 : run () 메소드의 루프 인 플래그 변수를 설정합니다.
코드 예제에 표시된대로 :
공개 ControlTest {mythreadclass r = 새로운 스레드 (R); mythreadclass는 runnable {private boolean flag = true;
스레드 수명주기 및 우선 순위 스레드 수명주기
스레드 수명주기 : 생성에서 스레드의 소멸에 이르기까지 프로세스.
다음 그림은 스레드 수명주기의 다양한 상태를 보여줍니다.
실의 수명주기는 4 개의 상태로 나눌 수 있습니다.
1. 상태 작성 :
새 연산자와 함께 새 스레드 객체가 생성되면 스레드가 생성 된 상태에 있습니다.
생성 된 상태의 스레드는 빈 스레드 객체 일 뿐이며 시스템은 리소스를 할당하지 않습니다.
2. 실행 가능 상태 :
실행 스레드의 start () 메소드는 필요한 시스템 리소스를 스레드에 할당하고, 작동을 정리하고, 스레드 바디 - run () 메소드를 호출하여 스레드가 실행 가능한 상태 (runnable)에 있도록합니다.
이 상태는 실행 상태가 아닙니다. 스레드가 실제로 실행되지 않을 수 있기 때문입니다.
3. 실행되지 않음 :
다음 이벤트가 발생하면 실행중인 상태의 스레드는 업적이 불가능한 상태로 전송됩니다.
수면 () 방법이 호출되었습니다.
스레드는 Wait () 메소드를 호출하여 특정 조건이 만족 될 때까지 기다립니다.
스레드 입력/출력 차단.
달리는 상태로 돌아 가기 :
수면 상태의 실은 지정된 시간 후에 통과되었습니다.
스레드가 특정 조건을 대기하는 경우 다른 객체는 notify () 또는 notifyall () 메소드를 통해 대기 스레드 조건 변경에 알려야합니다.
입력 및 출력으로 인해 스레드가 차단되면 입력 및 출력이 완료 될 때까지 기다리십시오.
4. 죽음 상태 :
스레드의 run () 메소드가 실행되면 스레드가 자연스럽게 죽습니다.
스레드 우선 순위
1. 스레드의 우선 순위 및 설정
스레드의 우선 순위는 멀티 스레드 환경에서 시스템의 스레드 예약을 용이하게하는 것입니다. 우선 순위가 높은 스레드가 먼저 실행됩니다.
스레드의 우선 순위 설정은 다음과 같은 원칙을 따릅니다.
실이 만들어지면 아이는 부모의 우선 순위를 물려받습니다.
스레드가 생성 된 후 SetPriority () 메소드를 호출하여 우선 순위를 변경할 수 있습니다.
스레드의 우선 순위는 1-10 사이의 양의 정수입니다.
1- Min_Priority
10-max_priority
5-norm_priority
아무것도 설정되지 않으면 기본값은 5입니다.
그러나 스레드의 우선 순위는 스레드의 실행 순서로 결정할 수 없습니다.
2. 스레드 스케줄링 전략
스레드 스케줄러는 실행하는 데 우선 순위가 가장 높은 스레드를 선택합니다. 그러나 다음이 발생하면 스레드가 종료됩니다.
수율 () 방법은 실 본체에서 호출되어 CPU 직업을 포기합니다.
스레드 본체에서 수면 () 메소드가 호출되어 실을 잠들게합니다.
I/O 작동으로 인해 스레드가 차단됩니다.
우선 순위가 높은 다른 스레드가 나타납니다.
타임 슬라이스를 지원하는 시스템에서는 스레드의 타임 슬라이스가 떨어집니다.