Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

자바 동시성 – yield() 메소드

<시간/>

수익률 함수

이 함수는 실행 시간이 너무 오래 걸리고 중요하지 않은 스레드보다 더 중요한 스레드가 먼저 실행되도록 합니다.

스레드가 java.lang.Thread.yield 메소드를 호출하면 스레드 스케줄러가 실행을 일시 중지한다는 표시입니다. 스레드 스케줄러는 이 표시를 수락하거나 무시하도록 선택합니다.

스레드가 'yield' 기능을 실행하면 스케줄러는 우선순위가 같거나 더 높은 스레드가 있는지 확인합니다. 그렇다면 현재 스레드가 실행 가능 또는 준비 상태로 이동되고 해당 스레드에 프로세서 리소스가 제공됩니다.

수익률 함수의 구문 -

public static native void yield()

예를 들어 보겠습니다 -

예시

import java.lang.*;
class Demo extends Thread{
   public void run(){
      for (int i=0; i<3 ; i++)
      System.out.println("In control of " + Thread.currentThread().getName() + " thread");
   }
}
public class Demo_one{
   public static void main(String[]args){
      Demo my_obj = new Demo();
      my_obj.start();
      for (int i=0; i<3; i++){
         Thread.yield();
         System.out.println("In control of " + Thread.currentThread().getName() + " thread");
      }
   }
}

출력

In control of main thread
In control of main thread
In control of main thread
In control of Thread-0 thread
In control of Thread-0 thread
In control of Thread-0 thread

Demo라는 클래스는 Thread 클래스를 확장합니다. 여기에서 요소 집합을 반복하고 'getName' 함수를 사용하여 스레드의 이름을 가져오는 '실행' 함수가 정의됩니다. 'Demo_one'이라는 클래스는 새 인스턴스가 생성되고 'start' 함수를 사용하여 시작되는 메인 함수를 정의합니다. 여기에서도 요소가 반복되고 스레드에서 yield 함수가 호출됩니다.

  • 스레드가 yield 메서드를 사용하여 실행을 완료하면 프로세서 리소스를 놓고 경쟁하는 스레드가 많이 있습니다. 어떤 스레드가 먼저 실행될지 지정할 방법이 없습니다.

  • 스레드가 yield 메소드를 실행하면 Running 상태에서 Runnable 상태로 전환됩니다.

  • yield 방식은 플랫폼이 선점형 스케줄링을 지원하는 경우에만 사용할 수 있습니다.

  • 스레드가 실행 중에 일시 중지되면 조만간 기회가 생길지 장담할 수 없으며 모두 스케줄링 알고리즘과 스레드 스케줄러에 따라 다릅니다.