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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵玮 黑马帝   /  2011-12-23 12:06  /  3791 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵玮 于 2011-12-25 16:36 编辑

启动一个线程是用run()还是start()?

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

10 个回复

倒序浏览
start()   

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1 简单明了

查看全部评分

回复 使用道具 举报
杨强 黑马帝 2011-12-23 12:12:43
藤椅
Tread类中start()方法是开始线程的方法。start()方法会用特殊的方法自动调用run()方法。run()方法是Tread的具体实现。
你继承了Thread类后就通过重写run()方法来说明线程的行为,调用start()方法来开始线程。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
将要运行的代码写入run()方法内,调用start()方法,程序会自动调用run()方法。
回复 使用道具 举报
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
回复 使用道具 举报
          通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,
并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方
法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,
此线程终止,而CPU再运行其它线程。
       如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线
程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
张绍成 黑马帝 2011-12-23 20:20:48
7#
start() 方法是启动线程的;run方法是线程中的执行体!  
当你调用了 start() 方法时,改方法回去调用run()方法;
可是这和你直接调用 run()方法执行的结果是不一样的!

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
于汝国 黑马帝 2011-12-23 21:36:44
8#
start()用来启动线程,这时无需等待run()方法体代码执行完毕而直接继续执行下面的代码:通过调用Thread类的start()方法此线程处于就需状态并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,她包含了要执行这个线程的内容,run方法运行结束,此线程终止。而cpu再运行其他线程。

run()当做普通的方法调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才执行下面的代码,而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主程序这一个线程,其程序执行路径还是一条,这样就没有达到写线程的目的。


举例说明:

public class TestThread(){

   public static void main(String []args){

        Runner1  r = new Runner1();

        //r.run();//这是方法调用,而不是开启一个线程
        Thread t = new Thread());//调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
        t.start();   

}
}

class  Runner1 implements Runnable{//实现了这个接口,jdk就知道这个类是一个线程

   public void run(){

     for(int j=0;j<100;j++){

          System.out.println("进入Runner1运行状态");

          System.out.println(j);

}
}
}

        for(int i=0;i<100;i++){

           System.out.println("进入了mianThread的运行方法");

            System.out.println(i);
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
strat()啊 中文翻译后也是它啊,无悬念。run是线程中的一个方法,你用线程做什么,就在线面写。
回复 使用道具 举报
陈浩 黑马帝 2011-12-24 15:51:00
10#
用start()方法启动线程,run()是Runnable 接口里面的方法,在继承Runnable 接口后须复写run()方法.
回复 使用道具 举报
张一凡 黑马帝 2011-12-28 23:37:47
11#
start()是启动线程,run()是引用Runnable 接口里面的方法     LS的都说的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马