黑马程序员技术交流社区
标题:
主线程和其它线程的执行顺序
[打印本页]
作者:
李东城
时间:
2013-2-15 18:05
标题:
主线程和其它线程的执行顺序
class Demo extends Thread
{
public void run()
{
for(int x=0; x<60;x++)
System.out.println("demo run="+x);
}
}
class ThreadDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
d.start();
for (int x=0;x<60 ;x++ )
System.out.println("Hello World!="+x);
}
}
复制代码
在开始讲多线程视频当中,有上面一段代码,运行以后主线程和继承Thread会出现交替运行的情况。
但是我有一个问题,如果Demo不集成Thread的话,把d.start();改成d.run();会先循环demo run,执行完毕之后,在运行主函数的循环,这个没有问题,因为先执行的d.run();
可是如果,按现在的代码,我运行了10几次,都是hello world+0先执行,最少执行一次,才会去执行另外一个线程,这是为什么?不应该按照代码的顺序先执行Demo中的循环么?
作者:
jonn
时间:
2013-2-15 18:12
d.start() 自动调用的run(),若你调用run也行,不过不是多线程了概念了,直接是方法调用,建议去看Thread 源代码..这里应该间接实现接口,直接是 利用底层实现,执行过程调用操作系统c /c++ 汇编的函数库实现
作者:
罗海云
时间:
2013-2-15 20:43
d.start 假如改为d.run的话就不是多线程了.就相当于调用了一个那个类里面的run方法. java执行线程的顺序. 都是先执行主函数, 其他线程交替.cpu执行其实还是单线程. 只是cpu切换线程速度太快, 毕老师视频里讲的很明白.
作者:
刘琦
时间:
2013-3-9 20:50
额,这个是必须的,这个可以参考Thread的源码,其实你在运行其他线程之前,创建的最早的线程是main,而不是别的你自己创建的线程,即使你没创建线程,man也会自动运行。main 可以说是程序运行的源头
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2