A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doevents 中级黑马   /  2013-9-19 01:06  /  1153 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 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
知道的解释下执行过程,谢谢,我是新手,有点懵了。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

4 个回复

正序浏览
运行后有两条线程,主线程和新建的线程
t.run();//普通方式的调用类的方法,属于主线程的执行大妈这个会打印B
t.start();//新建线程方式调run方法,这个新建一条线程后,会先睡眠3秒,然后再打印B
System.out.println("A");//这个也是主线程的执行代码,会打印A
结果:
B:这个是t.run()打印的
A
B:这个是t.start()打印的,因为休息三秒,所以主线程会先执行完
当把t.run()注释后,同理

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
酱爆 发表于 2013-9-19 01:31
MyThread线程休眠3秒,主线程还是活的呢!!!!

你只是把输出B的工作交给的MyThread线程,mian线程仍然走它自己的流程
回复 使用道具 举报
MyThread线程休眠3秒,主线程还是活的呢!!!!
回复 使用道具 举报
这很好理解,
1、因为run方法MyThread 是复写Thread类的方法,而你在调用这个方法时,和普通方法调用一样,没区别。所以不会执行 Thread.sleep(3000);直接执行到 B 的输出语句。
2、而调用start方法的作用就是,启动线程,并运行run方法。所以主线程中的 A 被输出。
3、而开启的线程还在被睡眠。等他醒来就执行了B。

这道题考的是为什么要复写run方法。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马