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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-4-17 18:38  /  4402 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

还是它们都可以?有什么不同?

7 个回复

倒序浏览
本帖最后由 曾虓 于 2012-4-17 18:56 编辑

看线程生命周期图:

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

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

回复 使用道具 举报
run()是线程程序,start()是开始命令。只有start()语句执行后,线程才启动。
回复 使用道具 举报
启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态。当CPU分配给它时间时,才开始执行run()方法.start()是方法,它调用run()方法.而run()方法是你必须重写的. run()方法中包含的是线程的主体。
回复 使用道具 举报
启动线程调用start()方法,然后由java虚拟机调用run()方法
回复 使用道具 举报
start()     of course
start()   开启线程 并启动run();   新的线程开动
run()  并没有开启新线程, 只是在主线程中执行。

main

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


如果是run的话



main

                ≠        ↓另一个线程
↓                                           ↓
run()                                        run()
回复 使用道具 举报
启动一个线程当然是用start()方法,线程启动了才会去执行线程里面的run方法;
回复 使用道具 举报
是start();它才是线程启动的方法,线程启动后会自动调用相应的run()方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马