请参阅下面的代码。这是来自 Oracle 教程页面的修改后的代码示例:
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.
为什么main在c之前执行?线程c与其“父”线程main具有相同的优先级。
是否main对c可见,因此c正在等待main返回?这没有意义,但这是我唯一能想到的。
//==============================
编辑:替换
c.run();
和
c.join();
以获得相同的效果和更精细的编程。