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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪璨 中级黑马   /  2012-6-23 00:57  /  2014 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class MyThread extends Thread{
        public void run(){
                try {
                        Thread.currentThread().sleep(3000);
                } catch (InterruptedException e) {
                }
                System.out.println("MyThread running");
        }
}

public class ThreadTest{
        public static void main(String argv[]) {
                MyThread t = new MyThread();
                t.run();
                t.start();
                System.out.println("Thread Test");
          }

}
主函数执行时,有一个主线程,该线程执行到MyThread t = new MyThread();
创建了一个新的线程对象,但是该线程并未运行。
当执行第二句t.run()时,
MyThread类中的run方法执行。这时执行到sleep方法,主线程会睡眠3秒。

为什么打印结果为MyThread running??

4 个回复

正序浏览
MyThread running
Thread Test
MyThread running
当主函数运行到t.run()时,第一个线程执行,停了三秒,打印输出了MyThread running
接着主函数运行到了t.start(),建立了一个新线程,停了三秒,
接着主函数打印了Thread Test
这时候新线程过了三秒,打印输出了MyThread running
回复 使用道具 举报
运行结果如下:
MyThread running
Thread Test
MyThread running

执行过程:睡眠3秒,执行输出”My Thread running”
启动新建线程  sleep3秒 主线程输出 “Thread Test”
3秒后 , 新建的线程输出 “MyThread running”

回复 使用道具 举报

这个是程序的运行结果:先停3秒后 打印出前两行,  再停3秒打印第三行。

程序这样分析:运行 t.run()后,这里一直都还是主线程, 先是停3秒,接着执行 System.out.println("MyThread  running");

      然后回到 main()方法中,  执行 t.start(), 新线程启动,这时有两个线程,
       然后新线程一启动就进入 3秒的等待,这时主线程就执行 了System.out.println("Thread Test");,
        3秒后,第二个线程唤醒,又执行了:System.out.println("MyThread running");   所以有这个打印结果。
回复 使用道具 举报
我运行的结果:MyThread running
Thread Test
MyThread running


没有错啊,运行时 先停了一会 然后打印MyThread running

然后新建的线程启动  停顿3秒 主线程先打印 Thread Test 3秒后建的线程打印MyThread running
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马