Thread. yield () 프로필
(1) 방법 원본 주석:
/**
* A hint to the scheduler that the current thread is willing to yield
* its current use of a processor. The scheduler is free to ignore this
* hint.
*
* Yield is a heuristic attempt to improve relative progression
* between threads that would otherwise over-utilise a CPU. Its use
* should be combined with detailed profiling and benchmarking to
* ensure that it actually has the desired effect.
*
*
It is rarely appropriate to use this method. It may be useful
* for debugging or testing purposes, where it may help to reproduce
* bugs due to race conditions. It may also be useful when designing
* concurrency control constructs such as the ones in the
* {@link java.util.concurrent.locks} package.
*/
대체로 yield () 방법 은 스 레 드 스케줄 러 가 프로세서 의 점용 을 포기 하 라 고 알 리 지만 스케줄 러 는 이 통 지 를 무시 할 수 있 습 니 다.yield () 방법 은 주로 스 레 드 간 스케줄 의 연속 성 을 보장 하고 특정한 스 레 드 가 cpu 자원 을 장시간 점용 하 는 것 을 방지 하기 위해 서 입 니 다.그러나 그의 사용 은 상세 한 분석 과 테스트 에 기초 해 야 한다.이 방법 은 일반적으로 사용 하 는 것 을 추천 하지 않 습 니 다. 주로 debug 와 테스트 프로그램 에 사용 되 며 bug 를 줄 이 고 병행 프로그램 구조 에 대한 디자인 을 사용 합 니 다.
(2) 방법 이해:
Thread. yield () 방법 은 많은 사람들 이 스 레 드 양보 로 번역 합 니 다. 즉, 하나의 스 레 드 가 이 방법 을 사용 하면 자신의 CPU 가 실행 하 는 시간 을 줄 이 고 현재 스 레 드 를 실행 상태 (실행 상태) 에서 실행 가능 상태 (준비 상태) 로 바 꾸 어 자신 이나 다른 스 레 드 를 실행 하 게 합 니 다.cpu 스케줄 러 는 여러 실행 가능 한 상태 에서 선택 합 니 다. 즉, 현재, 방금 그 스 레 드 는 다시 실 행 될 수 있 습 니 다. 반드시 다른 스 레 드 를 실행 할 것 이 라 고 말 하 는 것 이 아니 라 다음 스 레 드 에서 실 행 될 수 없습니다.
예 를 들 어 지금 많은 사람들 이 줄 을 서서 화장실 에 가 고 있 습 니 다. 가까스로 이 사람 이 화장실 에 갈 차례 가 되 었 습 니 다. 갑자기 이 사람 이 말 했 습 니 다. "누가 먼저 화장실 을 빼 앗 았 는 지 경쟁 해 보 겠 습 니 다!"그리고 모든 사람들 이 같은 라인 에서 화장실 로 달 려 갔 습 니 다. 다른 사람 이 빼 앗 았 을 수도 있 고 자신 이 빼 앗 았 을 수도 있 습 니 다.우 리 는 스 레 드 에 우선 순위 가 있다 는 것 도 알 고 있다. 그러면 우선권 을 가 진 이 사람들 이 화장실 의 위 치 를 반드시 빼 앗 을 수 있 을 까?꼭 그렇지 는 않 습 니 다. 그들 은 확률 이 높 을 뿐 특권 없 이 빼 앗 을 수도 있 습 니 다.
예:
package com.yield;
public class YieldTest extends Thread {
public YieldTest(String name) {
super(name);
}
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
System.out.println("" + this.getName() + "-----" + i);
// i 30 , CPU , ( )
if (i == 30) {
this.yield();
}
}
}
public static void main(String[] args) {
YieldTest yt1 = new YieldTest(" ");
YieldTest yt2 = new YieldTest(" ");
yt1.start();
yt2.start();
}
}
실행 결과:
: ( ) 30 CPU , ( ) CPU 。
: ( ) 30 CPU , ( ) CPU 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.