黑马程序员技术交流社区

标题: 为什么启动线程不能直接使用run()方法 [打印本页]

作者: 王江涛    时间: 2014-3-29 14:16
标题: 为什么启动线程不能直接使用run()方法
本帖最后由 王江涛 于 2014-4-13 20:16 编辑

为什么启动线程不能直接使用run()方法,必须通过start()方法启动?
作者: 黄晓鑫    时间: 2014-3-29 14:21
run方法只是普通调用方法,真正作用是调用start方法,start方法是开启一个线程,并运行一个线程
这张图看一下就可以了

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

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

谢了,会注意的
作者: syusikoku    时间: 2014-3-29 22:09
因为run方法它是从Thread类那里继承过来的。不管使用哪种方式定义线程类。真正起作用的都是Thead类。我们使用的两种方式,一种是创建Thread的子类对象,子类对象覆盖父类的run方法,在run方法中写入我们执行的线程代码。另外一种就是把我们要执行的线程任务封装在Runnable对象的run方法里面。然后把这个Runnable对象传递给Thread的构造方法。
作者: 董振冬    时间: 2014-3-30 10:27
启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。
作者: 王江涛    时间: 2014-3-30 21:44
syusikoku 发表于 2014-3-29 22:09
因为run方法它是从Thread类那里继承过来的。不管使用哪种方式定义线程类。真正起作用的都是Thead类。我们使 ...

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

昨天已经认真看过了,还是很感谢
作者: lazy_xia    时间: 2014-3-31 14:28
我觉得是可以直接调用run方法 你想啊毕竟run是你重写的不管你是extends Thread 或者是implements Runnable 要么是thread自类 要么是实现Runnable接口的类 既然都是类而且run 是你自己的方法不管你是否重写你要是有了 就可以调用  着这样子直接调用是不会启动线程的要问为什么的话 我也不是很清楚java就是这么设计的 或许看下Thread的run方法的原函数 会得到解答
作者: 孟凡超    时间: 2014-3-31 14:38
Thread类用于描述线程,其中定义一个存储功能run,用于存储线程要运行的代码。
主线程的代码在main()中,新线程的代码在run()中。
start除了调用run()方法外,还有一个启动线程的功能。
作者: 枫儿    时间: 2014-4-6 19:33
楼主你好,如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作




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