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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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循环的次数,修改大一点,效果会更加明显.



2 个回复

倒序浏览
start方法调用run方法
回复 使用道具 举报
Thread.start()是启动线程,在调用run()方法。而Thread.run()是没有启动线程就调用了run()方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马