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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liwugang 中级黑马   /  2014-9-11 22:47  /  1537 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分析以下程序运行结果,说明原理。(没有分析结果不得分)


    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");
            }
    }

2 个回复

倒序浏览
不知道分析的对不对,不对的话,哪位大神给指导下。
先运行run函数,然后t进程执行,但是t进程要进行准备资源和获取执行权,并有立即执行,而是主进程获取了执行权,先执行了主进程,主进程执行完释放了执行权,然后才轮到t进程执行。
回复 使用道具 举报
本帖最后由 yuli2039 于 2014-9-11 23:27 编辑

主线程从上往下执行:
t.run();//执行到这一句,是直接调用t对象的run方法,没有启动新线程,主线程要sleep3秒,然后打印 B
t.start();//主线程执行到这句,开启了一个新线程,主线程继续往下执行,新线程sleep3秒后打印 B,而主线程并没有sleep动作
System.out.println("A");//主线程打印 A

新线程sleep 3秒,所以主线程的A会先打出来,打印结果  B A B
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马