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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王江涛 中级黑马   /  2014-3-29 14:16  /  5686 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王江涛 于 2014-4-13 20:16 编辑

为什么启动线程不能直接使用run()方法,必须通过start()方法启动?

12 个回复

倒序浏览
run方法只是普通调用方法,真正作用是调用start方法,start方法是开启一个线程,并运行一个线程
这张图看一下就可以了

评分

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

查看全部评分

回复 使用道具 举报
感谢了,图片很详细,但好像有一点小毛病,新建线程对象后,调用start()方法就可启动线程,这时线程应该进入就绪状态吧,还不会到运行状态吧。
回复 使用道具 举报
黄晓鑫 发表于 2014-3-29 14:21
run方法只是普通调用方法,真正作用是调用start方法,start方法是开启一个线程,并运行一个线程
这张图看一 ...

感谢了,图片很详细,但好像有一点小毛病,新建线程对象后,调用start()方法就可启动线程,这时线程应该进入就绪状态吧,还不会到运行状态吧。
回复 使用道具 举报
哥们你看到我的上面还有一个阻塞状态吗? 这道题注意?以后面试一定会面到的
回复 使用道具 举报
黄晓鑫 发表于 2014-3-29 14:55
哥们你看到我的上面还有一个阻塞状态吗? 这道题注意?以后面试一定会面到的 ...

谢了,会注意的
回复 使用道具 举报
因为run方法它是从Thread类那里继承过来的。不管使用哪种方式定义线程类。真正起作用的都是Thead类。我们使用的两种方式,一种是创建Thread的子类对象,子类对象覆盖父类的run方法,在run方法中写入我们执行的线程代码。另外一种就是把我们要执行的线程任务封装在Runnable对象的run方法里面。然后把这个Runnable对象传递给Thread的构造方法。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
syusikoku 发表于 2014-3-29 22:09
因为run方法它是从Thread类那里继承过来的。不管使用哪种方式定义线程类。真正起作用的都是Thead类。我们使 ...

太感谢了,以后会注意的
回复 使用道具 举报
董振冬 发表于 2014-3-30 10:27
启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的 ...

昨天已经认真看过了,还是很感谢
回复 使用道具 举报
我觉得是可以直接调用run方法 你想啊毕竟run是你重写的不管你是extends Thread 或者是implements Runnable 要么是thread自类 要么是实现Runnable接口的类 既然都是类而且run 是你自己的方法不管你是否重写你要是有了 就可以调用  着这样子直接调用是不会启动线程的要问为什么的话 我也不是很清楚java就是这么设计的 或许看下Thread的run方法的原函数 会得到解答

评分

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

查看全部评分

回复 使用道具 举报
Thread类用于描述线程,其中定义一个存储功能run,用于存储线程要运行的代码。
主线程的代码在main()中,新线程的代码在run()中。
start除了调用run()方法外,还有一个启动线程的功能。
回复 使用道具 举报
楼主你好,如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马