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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李东城 中级黑马   /  2013-2-15 18:05  /  2510 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo extends Thread
  2. {
  3. public void run()
  4. {
  5. for(int x=0; x<60;x++)
  6. System.out.println("demo run="+x);
  7. }
  8. }
  9. class ThreadDemo
  10. {
  11. public static void main(String[] args)
  12. {
  13. Demo d = new Demo();
  14. d.start();

  15. for (int x=0;x<60 ;x++ )
  16. System.out.println("Hello World!="+x);
  17. }
  18. }

复制代码
在开始讲多线程视频当中,有上面一段代码,运行以后主线程和继承Thread会出现交替运行的情况。

但是我有一个问题,如果Demo不集成Thread的话,把d.start();改成d.run();会先循环demo run,执行完毕之后,在运行主函数的循环,这个没有问题,因为先执行的d.run();

可是如果,按现在的代码,我运行了10几次,都是hello world+0先执行,最少执行一次,才会去执行另外一个线程,这是为什么?不应该按照代码的顺序先执行Demo中的循环么?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
d.start() 自动调用的run(),若你调用run也行,不过不是多线程了概念了,直接是方法调用,建议去看Thread 源代码..这里应该间接实现接口,直接是 利用底层实现,执行过程调用操作系统c /c++ 汇编的函数库实现
回复 使用道具 举报
d.start 假如改为d.run的话就不是多线程了.就相当于调用了一个那个类里面的run方法. java执行线程的顺序. 都是先执行主函数, 其他线程交替.cpu执行其实还是单线程. 只是cpu切换线程速度太快, 毕老师视频里讲的很明白.
回复 使用道具 举报
额,这个是必须的,这个可以参考Thread的源码,其实你在运行其他线程之前,创建的最早的线程是main,而不是别的你自己创建的线程,即使你没创建线程,man也会自动运行。main 可以说是程序运行的源头
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马