請參閱下面的代碼。這是從Oracle教程頁面的修改後的代碼示例:Java線程優先
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.
和是好的。
當我在main方法註釋掉
c.run();
,我得到
0: null
2: null
3: Mares do not eat oats.
1: Mares do eat oats.
4: Mares do eat oats.
主要是前Ç執行怎麼來的?線程c具有與其「父」線程相同的優先級主要。
難道主要是可見的ç從而ç等待主要返回?這是沒有道理的,但是我能想到的唯一的事情。
// ============================
編輯: 更換
c.run();
與
c.join();
爲相同的效果和更精細的編程。
http://arashmd.blogspot.com/2013/06/java-threading.html#synctr – 2013-10-21 12:27:24
優先級只是一個提示,在許多情況下完全忽略,如果你不是'root'或'administrator'它只是很重要如果你的CPU使用率很高,我不建議你這樣做。 –
Peter Lawrey:我知道公平是保證避免飢餓的一件事 - 雖然不能保證等待時間最長的線程第一回合,但沒有聽到高CPU利用率(?) – Roam