黑马程序员技术交流社区

标题: 启动一个线程是用run()还是start()? [打印本页]

作者: 党传才    时间: 2012-4-17 18:38
标题: 启动一个线程是用run()还是start()?
还是它们都可以?有什么不同?
作者: 曾虓    时间: 2012-4-17 18:45
本帖最后由 曾虓 于 2012-4-17 18:56 编辑

看线程生命周期图:

参考网上的说法:
线程生命周期:
新建-就绪-(阻塞)-运行--死亡其中当用new 创建完一个线程对象后,该线程处于新建状态    当线程对象调用了start()后,该线程处于就绪状态      如果处于就绪状态的线程获得CPU时间片,开始执行run方法的线程执行体,该线程处于运行状态   如果线程调用了sleep()或者调用了一个阻塞式IO方法等,该线程处于阻塞状态   如果线程的run()执行完成或者抛出一个未捕获的异常等原因,该线程处于死亡状态

结合图片自己再理解下。
再提一点:
Thread类的线程对象是从run()开始执行的,继承该类编写线程线程子类是实现多线程的方式之一,而且需要重写run()方法。


作者: 王永旺    时间: 2012-4-17 18:48
run()是线程程序,start()是开始命令。只有start()语句执行后,线程才启动。
作者: 王德南    时间: 2012-4-17 19:13
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态。当CPU分配给它时间时,才开始执行run()方法.start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。

作者: 伊文龙    时间: 2012-4-17 19:15
启动线程调用start()方法,然后由java虚拟机调用run()方法
作者: 翟友伟    时间: 2012-4-17 19:49
start()     of course
start()   开启线程 并启动run();   新的线程开动
run()  并没有开启新线程, 只是在主线程中执行。

main

start()              ↓另一个线程
↓                          ↓
run()                   run()


如果是run的话



main

                ≠        ↓另一个线程
↓                                           ↓
run()                                        run()

作者: 黑马-刘昌文    时间: 2012-4-17 19:56
启动一个线程当然是用start()方法,线程启动了才会去执行线程里面的run方法;
作者: 袁培育    时间: 2012-4-17 20:05
是start();它才是线程启动的方法,线程启动后会自动调用相应的run()方法。




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