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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何向阳 中级黑马   /  2012-12-11 09:26  /  1085 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                                          java中Thread线程中的 start()和run()方法的区别(2)——实例

class NewThread implements Runnable {
    Thread t;
    public NewThread() {
      t = new Thread(this,"Demo thread");
        System.out.println("Child thread : " + t);
         t.run();
    }
    public void run(){
        try{
            for( int i = 5; i > 0; i --){
            System.out.println("Child thread :" + i);
            Thread.sleep(500);
            }

        }catch(InterruptedException e){
       System.out.println("Child interrupted.");
        }
      System.out.println("Exiting child thread.");

    }
}

public class TestDemo{
    public static void main(String args[]){
         new NewThread();
         try{
         for( int i = 5; i > 0; i --){
            System.out.println("Main thread :" + i);
            Thread.sleep(1000);
            }
        }catch(InterruptedException e){
        System.out.println("Main interrupted.");
        }
        System.out.println("Exiting Main thread.");
    }
}

    这是一个实现多线程的程序,运行结果如下:
    Child thread : Thread[Demo thread,5,main]
    Main thread :5
    Child thread :5
    Child thread :4
    Main thread :4
    Child thread :3
    Child thread :2
    Main thread :3
    Child thread :1
    Exiting child thread.
    Main thread :2
    Main thread :1
    Exiting Main thread.

如果把 start()改成run()会出现什么结果?
    修改之后运行结果:
    Child thread : Thread[Demo thread,5,main]
    Child thread :5
    Child thread :4
    Child thread :3
    Child thread :2
    Child thread :1
    Exiting child thread.
    Main thread :5
    Main thread :4
    Main thread :3
    Main thread :2
    Main thread :1
    Exiting Main thread.
    程序运行成为了单线程顺序执行。为什么?
    start方法:用来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, run方法运行结束, 此线程终止, 而CPU再运行其它线程,
    直接用run方法: 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
    记住:线程就是为了更好地利用CPU,提高程序运行速率的!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马