首先,程序时一步一步执行的
你在Thread t = new Thread (new Demo(),"xl");
实例了一个对象
然后将其打印出来System.out.println(t.getName()+" --> 线程启动。");
所以输出结果的第一步为xl --> 线程启动
********************************
然后,你让其休眠,
程序调用System.out.println("1、Demo --> 程序进入休眠状态。") ;
输出1、Demo --> 程序进入休眠状态。
********************************
其次,由于你在主程序中让其休眠10000
但在run()方法中又让其休眠了20000
所以在主程序休眠了10000后执行下一步时run方法还在进行休眠
你主程序的下一步打印了System.out.println("5、MAIN --> 中断线程") ;
所以显示5、MAIN --> 中断线程
*******************************
在打印了上面一句话后调用了 t.interrupt();
打断了run中的休眠
抛出异常
所以调用catich块里面得代码System.out.println("2、Demo --> 休眠中断");
在控制台打印了2、Demo --> 休眠中断
因其打印了上述语句后直接return 所以不执行System.out.println("3、Demo --> 程序正常退出。");
*******************************
最后,程序退出,执行System.out.println("6、MAIN --> 程序退出。");
打印了6、MAIN --> 程序退出。
我来,
首先看Demo01类中,的main方法,
Thread t = new Thread (new Demo(),"xl");
创建了一个名称为x1,Demo类的线程实例t,
System.out.println(t.getName()+" --> 线程启动。");这行输出容易懂吧。。。
t.start();//t线程启动,(此时先执行System.out.println("4、MAIN --> 让线程休眠",实际上,这是随机的,他也可能在run()后,执行)
开始执行Demo类的
run()方法,输出:System.out.println("1、Demo --> 程序进入休眠状态。") ;
又因为Thread.sleep(10000);时间小于run()方法中时间,所以在10000时休眠, System.out.println("5、MAIN --> 中断线程") ;,在20000时,线程醒来~~~继续执行,
System.out.println("2、Demo --> 休眠中断");然后是System.out.println("3、Demo --> 程序正常退出。");
其实啊,小朋友,你只要搞清楚线程的执行顺序就好办了,t.start()之后,便开始执行线程的run()方法。
重思想 轻代码!
都是高手啊,我就不献丑了!