请参阅下面的代码。这是从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