java 线程问题
Java code
public class BadThreads {
static String message;
private static class CorrectorThread
extends Thread {
public void run() {
try {
sleep(3000);
} catch (InterruptedException e) {}
// Key statement 1:
message = "Mares do eat oats.";
}
}
public static void main(String args[])
throws InterruptedException {
(new CorrectorThread()).start();
message = "Mares do not eat oats.";
Thread.sleep(4000);
// Key statement 2:
System.out.println(message);
}
}
请问这段代码执行的顺序是怎样的?执行结果呢?
------解决方案--------------------不同意楼上观点;
启动顺序肯定是先是主线程,就是main函数所在的线程,然后是在main函数中启动的另一个线程new CorrectorThread()).start();
在第二个线程启动之后,两个线程并行执行。所以语句执行的先后有随机性。这个随机性与睡眠的时间有关,时间相差越短,随机性越高。所以执行的结果可能是eat也可能是don't eat。但是在特定的环境下,比如楼主的主机环境下,睡眠3000和4000,可能尝试100次结果都是相同的,但是这不足以证明,这个执行顺序就是确定的,在其他环境下(比如把睡眠时间改为20),不一定这个结果。
------解决方案--------------------
------解决方案--------------------