黑马程序员技术交流社区
标题:
run方法和start方法有什么区别?
[打印本页]
作者:
范鹏飞
时间:
2013-4-2 19:08
标题:
run方法和start方法有什么区别?
本帖最后由 范鹏飞 于 2013-4-3 11:16 编辑
想问下run方法和start方法有什么区别?我这儿有点晕,start也是调用的run方法,同样是执行的。为什么直接调用run方法就相当于是一直在运行主线程,而用start方法调用的时候,就是主线程和start线程切换运行?
作者:
HM何伟
时间:
2013-4-2 19:36
直接调用run()方法,不理解为调用主线程,只能说是调用一个普通的方法而已.Main()函数本身就是一个主线程.
而创建其它的线程必须继承Thread或或者实现Runnable接口,并由这两者自已的start()调用run()方法,所以子类必须自已创建run()复写父类子的run())方法.
作者:
ㄨ____陌生
时间:
2013-4-2 19:38
开启线程的方法就是start,start()用来启动线程,真正实现了多线程,这时无需等待run()方法体代码执行完毕而直接继续执行下面的代码:通过调用Thread类的start()方法此线程处于就需状态并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,她包含了要执行这个线程的内容,run方法运行结束,此线程终止。而cpu再运行其他线程。
run()当做普通的方法调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才执行下面的代码,而如果直接用run方法,这只是调用一个方法而已,程序中依然只有主程序这一个线程,其程序执行路径还是一条,这样就没有达到写线程的目的。
作者:
张源锋
时间:
2013-4-2 19:44
如果直接调用run()方法,那不叫线程,只能说是普通的方法调用。只有通过start()方法才能够说是启动一个线程,线程和方法调用是完全不同的两个概念
作者:
原满
时间:
2013-4-2 19:45
启动线程使用start()方法而不是run()方法。调用start()方法来启动线程,系统会把该run()方法当成线程执行体来处理;但如果直接调用线程对象的run()方法,则run()方法会立即执行,而且在run()方法返回之前其他线程无法并发执行,直接调用对象的run()方法系统会把线程对象当成一个普通对象,而run()方法也是一个普通方法,而不是线程执行体
作者:
程媛媛
时间:
2013-4-2 20:28
run方法是里面存放的是要这个线程要运行的代码,
start方法是启动线程并执行run方法里面的内容。
通过代码演示:
class ZiT extends Thread{
public void run(){//存放的要运行的代码
for(int x = 0;x<30;x++){
System.out.println("run....."+x);
}
}
}
public class Demo1{
public static void main(String[] args) {
ZiT zit = new ZiT();//创建一个线程。这个线程并没有启动
//(由于main函数是程序的入口,创建线程是由主线程执行的,当执行到zit.run()的时候,只是普通的调用一个类的run方法,)
//zit.run();
zit.start();//是启动这个线程,并由这个线程执行run方法里面的内容。
for(int x = 0;x<50;x++){
System.out.println(Thread.currentThread().getName()+"..."+x);
}
}
}
复制代码
作者:
陈丽莉
时间:
2013-4-2 22:09
若还有问题,继续追问; 没有的话,将帖子分类改成【已解决】哦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2