Java Thread.yield ()에 대한 간략한 소개

1. 개요

이 튜토리얼에서, 우리는 방법을 살펴볼 것이다 수율 () 에서 스레드 클래스를.

이를 Java에서 사용할 수있는 다른 동시성 관용구와 비교하고 결국 실제 응용 프로그램을 탐색 할 것입니다.

2. yield () 개요

공식 문서에서 알 수 있듯이 yield ()현재 스레드가 현재 사용중인 프로세서를 포기할 의향이 있지만 가능한 한 빨리 예약을 원한다는 것을 "스케줄러"에 알리는 메커니즘을 제공 합니다.

"스케줄러"는이 정보를 고수하거나 무시할 수 있으며 실제로 운영 체제에 따라 다양한 동작을합니다.

다음 코드 조각은 각 일정 이후에 동일한 우선 순위로 두 개의 스레드를 표시합니다.

public class ThreadYield { public static void main(String[] args) { Runnable r = () -> { int counter = 0; while (counter < 2) { System.out.println(Thread.currentThread() .getName()); counter++; Thread.yield(); } }; new Thread(r).start(); new Thread(r).start(); } }

위의 프로그램을 여러 번 실행하려고하면 다른 결과가 나타납니다. 그들 중 일부는 아래에 언급되어 있습니다.

실행 1 :

Thread-0 Thread-1 Thread-1 Thread-0

실행 2 :

Thread-0 Thread-0 Thread-1 Thread-1

따라서 yield () 의 동작 은 비 결정적이며 플랫폼에 따라 다릅니다.

3. 다른 관용구와 비교

스레드의 상대적 진행에 영향을 미치는 다른 구성이 있습니다. 그들은 포함 대기 () , 통지 ()의 notifyAll () 의 일환으로 개체 클래스 에 가입 () 의 일부로서 스레드 클래스 및 수면 () 의 일부로서 스레드 클래스를.

yield ()와 어떻게 비교되는지 봅시다 .

3.1. yield ()wait ()

  • yield () 는 현재 스레드의 컨텍스트에서 호출 되지만 wait () 는 동기화 된 블록 또는 메서드 내에서 명시 적으로 획득 한 잠금에서만 호출 할 수 있습니다.
  • yield () 와 달리 wait () 는 스레드를 다시 예약하려고 시도하기 전에 대기 할 최소 시간을 지정할 수 있습니다.
  • 함께 대기 ()의 호출을 통해 언제 스레드를 해제하는 것도 가능 통지 () 또는 가는 notifyAll () 당해 로크 개체

3.2. yield ()sleep ()

  • yield () 는 현재 스레드의 실행을 일시 중단하려는 경험적 시도 만 할 수 있지만 언제 다시 예약 될 것인지 보장하지 않고 sleep () 은 스케줄러가 적어도 언급 된 시간 동안 현재 스레드의 실행을 중단하도록 강제 할 수 있습니다. 매개 변수로 기간.

3.3. yield ()join ()

  • 현재 스레드는 다른 스레드에서 join () 을 호출 하여 진행하기 전에 현재 스레드가 다른 스레드가 죽을 때까지 기다리도록 할 수 있습니다.
  • 선택적으로 현재 스레드가 재개하기 전에 대기해야하는 최대 시간을 나타내는 매개 변수로 기간을 언급 할 수 있습니다.

4. yield () 사용법

공식 문서에 따르면 yield () 사용이 거의 필요하지 않으므로 동작에 비추어 목표가 명확하지 않은 한 피해야합니다.

그럼에도 불구하고 yield ()의 일부 사용 에는 동시성 제어 구조 설계, 컴퓨팅이 많은 프로그램에서 시스템 응답 성 향상 등이 포함됩니다.

그러나 이러한 사용에는 원하는 결과를 보장하기 위해 상세한 프로파일 링 및 벤치마킹이 수반되어야합니다.

5. 결론

이 간단한 기사에서는 Thread 클래스 의 yield () 메서드에 대해 논의하고 코드 조각을 통해 동작과 제한 사항을 확인했습니다.

또한 Java에서 사용할 수있는 다른 동시성 관용구와의 비교를 살펴보고 마지막으로 yield () 가 유용 할 수 있는 일부 사용 사례를 살펴 보았습니다 .

항상 그렇듯이 GitHub에서이 기사에 제공된 예제를 확인할 수 있습니다.