黑马程序员技术交流社区

标题: 【学习笔记】Thread.start()与Thread.run()有什么区别 [打印本页]

作者: 凶狠搞Android    时间: 2015-8-2 23:36
标题: 【学习笔记】Thread.start()与Thread.run()有什么区别
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循环的次数,修改大一点,效果会更加明显.




作者: Matrix_heima    时间: 2015-8-2 23:46
start方法调用run方法
作者: 崔宝文    时间: 2015-8-3 00:13
Thread.start()是启动线程,在调用run()方法。而Thread.run()是没有启动线程就调用了run()方法




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