- 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),不一定这个结果。
------解决方案--------------------
------解决方案--------------------