public class Test extends Thread {
public void run() {
try{
Thread.currentThread().sleep(3000);
}catch(Exception e){}
System.out.println("MyThread running");
} public static void main(String[] args) { Test p = new Test();
p.run();
p.start();
System.out.println("test");
}
}请给出执行结果并分析过程。
这题很困惑啊。
所以主线程睡3秒后打印MyThread running,主线程继续执行p.start();启动新线程,调用run方法再次睡3秒,然后打印MyThread running,因为新线程睡了3秒,所以在新线程睡觉的时候主线程会继续执行打印test,也就是说test先于第2个MyThread running打印
MyThread running
test
MyThread running
分析:p.run 输出一句话
接下来输出test,然后3秒后再输出
有什么问题么?
p.run();
p.start();
System.out.println("test");p.run(): 这就是在main方法的线程里执行的,并未开启新线程,所以,在p.run()执行完之前,将导致阻塞;
p.start(): 启动了一新线程,启动完成之后,就跑下去执行System.out.println("test");
所以,程序的执行结果是:
MyThread running
test
MyThread running
分析:
先打印MyThread running
再打印test
最后打印MyThread running