아래 코드를 참조하십시오. 이 오라클 튜토리얼 페이지에서 수정 된 코드 예제입니다 :자바 스레드 우선 순위
public class BadThreads {
static String message;
private static class CorrectorThread extends Thread {
public void run() {
try {
sleep(1000);
} catch (InterruptedException e) {}
message = "Mares do eat oats.";
System.out.println("1: "+ message);
}
}
public static void main(String args[]) throws InterruptedException {
CorrectorThread c=new CorrectorThread();
c.start();
System.out.println("0: "+ message);
c.run();
System.out.println("2: "+ message);
message = "Mares do not eat oats.";
System.out.println("3: "+ message);
Thread.sleep(2000);
System.out.println("4: "+ message);
}
}
인쇄
0: null
1: Mares do eat oats.
1: Mares do eat oats.
2: Mares do eat oats.
3: Mares do not eat oats.
4: Mares do not eat oats.
하고 괜찮습니다.
내가 주요 방법
c.run();
을 주석, 내가 얻을
0: null
2: null
3: Mares do not eat oats.
1: Mares do eat oats.
4: Mares do eat oats.
메인이 C 전에 실행되어 온 방법은? 스레드 c은 "부모"스레드와 동일한 우선 순위를 갖습니다. 주.
그것은 주요이 C 볼 수 있으며, 따라서 C이 주요가 반환 할 기다리고 있음인가? 이것은 이해가되지 않지만 내가 생각할 수있는 유일한 것입니다.
// ============================
편집 : 와
c.run();
교체
c.join();
동일한 효과와 미세한 프로그래밍.
http://arashmd.blogspot.com/2013/06/java-threading.html#synctr –
우선 순위는 힌트 일 뿐이며 대부분의 경우 '루트'또는 '관리자'가 아닌 경우 완전히 무시됩니다. CPU 사용률이 높으면 그렇게하는 것이 좋습니다. –
Peter Lawrey : 공정성은 한 가지 이유로 기아를 피할 수 있다는 것을 알고 있습니다. 가장 긴 대기 스레드를 보장하지는 않지만 첫 번째 턴에서는 보장하지 않지만 높은 CPU 사용률은 들리지 않습니다. ( – Roam