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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马潘浩 中级黑马   /  2013-3-9 21:26  /  1442 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马潘浩 于 2013-3-10 11:03 编辑

在多线程中run()和start()都有什么作用?他们的区别是什么?启动一个线程是用run()还是start()?望大神详解,多线程难以理解。。

3 个回复

倒序浏览
本帖最后由 朱荣宁. 于 2013-3-9 21:42 编辑

我来回答你的这个问题:
首先你要明白 run方法是线程执行时的方法,start是启动线程的方法,所以启动一个线程是用start.
这里我详细给你说一下他们的区别,希望对你有帮助.
我感觉他们最大的区别就是:调用start方法可实现多线程,而调用run方法没有实现多线程
因为用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,
一旦得到spu时间片,就开始执行run()方法,这里方法run()称为线程体,
它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止.

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

所以调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。




回复 使用道具 举报
start()方法它只是启动一个线程,run()方法是储存线程运行的代码,当调用start()方法的时候,会创建一个新的线程,并会找run()方法,如果这个线程没有抢占到cpu资源还会处于冻结状态的。启动一个线程使用的start()方法,因为使用run()方法只是一个方法的简单调用,没有创建一个新的线程。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马