黑马程序员技术交流社区
标题:
关于Thread中的run和start
[打印本页]
作者:
王瀛
时间:
2013-1-8 10:46
标题:
关于Thread中的run和start
刚开始接触线程,练习的时候将代码A中的start()改成run(),结果不一样了。
附代码:
代码A
class Test extends Thread
{
private String name;
Test(String name)
{
this.name = name;
}
public void run()
{
for (int x = 0;x<600 ;x++ )
{
System.out.println(name+"run..."+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1 = new Test("我是一号线程");
Test t2 = new Test("二号线程是我");
t1.start();
t2.start();
for (int x =0;x<600 ;x++ )
{
System.out.println("main....."+x);
}
}
}
复制代码
代码B
class Test extends Thread
{
private String name;
Test(String name)
{
this.name = name;
}
public void run()
{
for (int x = 0;x<600 ;x++ )
{
System.out.println(name+"run..."+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1 = new Test("我是一号线程");
Test t2 = new Test("二号线程是我");
t1.run();
t2.run();
for (int x =0;x<600 ;x++ )
{
System.out.println("main....."+x);
}
}
}
复制代码
代码A的结果是三个线程相互穿插打印的
代码B是一个线程打印完再打印下一个
API中对start()方法的描述是:
使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
为什么结果会不一样呢?
作者:
王少雷
时间:
2013-1-8 12:26
代码A 开启线程 走的是 线程流程,主函数 线程执行权比较强,执行完 再执行别的线程,线程有一种随机执行权的问题。
代码B 又没走线程流程,只是 普通一个线程,普通的调用 方法而已,按顺序执行呗。
作者:
何竹冬
时间:
2013-1-8 12:49
你好
开启线程使用start方法,run方法只是一个方法调用。
当开启多个线程的时候他们会和主线程抢夺cpu执行权,所以会出现交替执行的情况。
而调用run方法只是一个方法调用都在主线程内执行所以会按顺序执行。
作者:
炉海佳
时间:
2013-2-14 23:56
举例说明run()意思是你在写代码,然后叫你去扫地,你去扫地回来继续写代码,扫地写代码都是你一个人干的。而start()是你在写代码叫另一个人去扫地,你们两人同时进行,你们两就是两线程,效率肯定快
作者:
邵俊达
时间:
2013-3-3 05:34
start().会开启一一个线程,并调用run(). 如果直接写run()的话没有开启线程,所以程序中就只有主线程,所以就顺序执行了。
作者:
1844611785
时间:
2013-5-4 23:34
其实在B中只有一个线程在使用CPU资源(main线程),你只是创建了两个线程,并没有启动。所以主线程是按照先后顺序执行的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2