黑马程序员技术交流社区

标题: 线程的执行问题 [打印本页]

作者: doevents    时间: 2013-9-19 01:06
标题: 线程的执行问题
本帖最后由 杨增坤 于 2013-9-19 12:19 编辑

代码如下:
public class ThreadTest {
        public static void main(String args[]) {
        MyThread t = new MyThread();
        t.run();
        t.start();
        System.out.println("A");
        }
    }

    class MyThread extends Thread {
        public void run() {
            try {
                Thread.sleep(3000);
                } catch (InterruptedException e) {
             }
            System.out.println("B");
            }
    }
以上的代码的结果是:
B
A
B
如果把t.run();注释掉为什么是
A
B
知道的解释下执行过程,谢谢,我是新手,有点懵了。

作者: (0.0)’    时间: 2013-9-19 01:28
这很好理解,
1、因为run方法MyThread 是复写Thread类的方法,而你在调用这个方法时,和普通方法调用一样,没区别。所以不会执行 Thread.sleep(3000);直接执行到 B 的输出语句。
2、而调用start方法的作用就是,启动线程,并运行run方法。所以主线程中的 A 被输出。
3、而开启的线程还在被睡眠。等他醒来就执行了B。

这道题考的是为什么要复写run方法。
作者: 酱爆    时间: 2013-9-19 01:31
MyThread线程休眠3秒,主线程还是活的呢!!!!
作者: 酱爆    时间: 2013-9-19 01:34
酱爆 发表于 2013-9-19 01:31
MyThread线程休眠3秒,主线程还是活的呢!!!!

你只是把输出B的工作交给的MyThread线程,mian线程仍然走它自己的流程
作者: 陈国柱    时间: 2013-9-19 12:15
运行后有两条线程,主线程和新建的线程
t.run();//普通方式的调用类的方法,属于主线程的执行大妈这个会打印B
t.start();//新建线程方式调run方法,这个新建一条线程后,会先睡眠3秒,然后再打印B
System.out.println("A");//这个也是主线程的执行代码,会打印A
结果:
B:这个是t.run()打印的
A
B:这个是t.start()打印的,因为休息三秒,所以主线程会先执行完
当把t.run()注释后,同理




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2