黑马程序员技术交流社区
标题:
启动一个线程是用run()还是start()?
[打印本页]
作者:
党传才
时间:
2012-4-17 18:38
标题:
启动一个线程是用run()还是start()?
还是它们都可以?有什么不同?
作者:
曾虓
时间:
2012-4-17 18:45
本帖最后由 曾虓 于 2012-4-17 18:56 编辑
看线程生命周期图:
5285677286_bebea7a3d0.jpg
(77.84 KB, 下载次数: 100)
下载附件
2012-4-17 18:45 上传
参考网上的说法:
线程生命周期:
新建-就绪-(阻塞)-运行--死亡其中当用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