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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 nanfp 于 2015-7-7 16:14 编辑

Thread.start()与Thread.run()有什么区别?看视频没有搞懂这个问题,请大家帮忙解释一下:handshake

8 个回复

倒序浏览
Thread.start()方法,其实是做了两件事: 第一,它启动了线程, 第二, 它调用了run()方法.
而 Thread.run()方法,实际上并没有启动线程, 而是主线程去调用该对象的run()方法,
所以说,如果仅仅是Thread.run(),那么主线程会先跳到run()方法里执行, 执行完了,会继续往下执行下面的代码...

不知道这样说,你能不能明白其中的区别

下面贴出来两段代码, 楼主如果还是不太理解的话,试着结合代码的运行结果来分析,应该可以理解到..

代码一: 测试Thread.run():
  1. class RunTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test t = new Test();

  6.                 Thread t1 = new Thread(t);
  7.                 t1.run();

  8.                 //主线程也执行同样的循环,以示区别.
  9.                 for (int x=0; x<10 ;x++ )
  10.                 {
  11.                         System.out.println("-----main");
  12.                 }
  13.         }
  14. }

  15. class Test implements Runnable
  16. {
  17.         //覆写run()方法
  18.         public void run()
  19.         {
  20.                 for (int x=0; x<10 ;x++ )
  21.                 {
  22.                         System.out.println("Test-----");
  23.                 }
  24.                
  25.         }
  26. }
复制代码

运行结果:




代码二 :  测试Thread.start();
  1. class StartTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test1 t = new Test1();

  6.                 Thread t1 = new Thread(t);
  7.                 t1.start();

  8.                 //主线程也执行同样的循环,以示区别.
  9.                 for (int x=0; x<10 ;x++ )
  10.                 {
  11.                         System.out.println("-----main");
  12.                 }
  13.         }
  14. }

  15. class Test1 implements Runnable
  16. {
  17.         //覆写run()方法
  18.         public void run()
  19.         {
  20.                 for (int x=0; x<10 ;x++ )
  21.                 {
  22.                         System.out.println("Test1-----");
  23.                 }
  24.         }
  25. }
复制代码
运行结果:


提醒: 由于循环次数比较少,出现的结果可能与我这边的结果不太一样, 如果很多次都没有这样的交替出现的打印结果,楼主可以尝试修改代码中for循环的次数,修改大一点,效果会更加明显.


回复 使用道具 举报
牛啊,大神!
回复 使用道具 举报
调用start()方法才会启动子线程,调用run()方法是主线程去执行的,有很大的区别。
回复 使用道具 举报
回答好详细,受教了!
回复 使用道具 举报
凶狠搞Android 发表于 2015-7-6 23:41
Thread.start()方法,其实是做了两件事: 第一,它启动了线程, 第二, 它调用了run()方法.
而 Thread.run()方法 ...

牛!!谢谢你的详细讲解,看明白了:victory:
回复 使用道具 举报
问得好 start()也调用run() 但没有开启多线程的功能 也就是说 start()是程序分叉的起点 run不是
回复 使用道具 举报
顶二楼,,
回复 使用道具 举报
分享快乐 赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马