黑马程序员技术交流社区

标题: 这题怎么答?????? [打印本页]

作者: liwugang    时间: 2014-9-11 22:47
标题: 这题怎么答??????
分析以下程序运行结果,说明原理。(没有分析结果不得分)


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

作者: 夜半风    时间: 2014-9-11 23:20
不知道分析的对不对,不对的话,哪位大神给指导下。
先运行run函数,然后t进程执行,但是t进程要进行准备资源和获取执行权,并有立即执行,而是主进程获取了执行权,先执行了主进程,主进程执行完释放了执行权,然后才轮到t进程执行。
作者: yuli2039    时间: 2014-9-11 23:25
本帖最后由 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




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