黑马程序员技术交流社区

标题: 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方法里面的内容。
通过代码演示:
  1. class ZiT extends Thread{
  2.         public void run(){//存放的要运行的代码
  3.                 for(int x = 0;x<30;x++){
  4.                         System.out.println("run....."+x);
  5.                 }
  6.         }
  7. }

  8. public class Demo1{
  9.         public static void main(String[] args) {
  10.        
  11.                 ZiT zit = new ZiT();//创建一个线程。这个线程并没有启动
  12.                 //(由于main函数是程序的入口,创建线程是由主线程执行的,当执行到zit.run()的时候,只是普通的调用一个类的run方法,)
  13.                 //zit.run();
  14.                 zit.start();//是启动这个线程,并由这个线程执行run方法里面的内容。
  15.                
  16.                 for(int x = 0;x<50;x++){
  17.                         System.out.println(Thread.currentThread().getName()+"..."+x);
  18.                 }
  19.         }
  20. }
复制代码

作者: 陈丽莉    时间: 2013-4-2 22:09
若还有问题,继续追问; 没有的话,将帖子分类改成【已解决】哦~




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