黑马程序员技术交流社区
标题:
线程的调用为什么ruan和start都可以调用,有什么区别啊
[打印本页]
作者:
337091921
时间:
2013-4-26 21:10
标题:
线程的调用为什么ruan和start都可以调用,有什么区别啊
class A extends Thread//第一步继承类
{
private String name;
A(String name)
{
this.name=name;
}
public void run()//第二步覆盖run方法
{
for(int x=0;x<10;x++)
{
for(int y=0;y<10;y++)
{}
System.out.println(name+"....x="+x);
}
}
}
class Java
{
public static void main (String []args)
{
A a=new A("唐明雨");
A b=new A("刘潇莹");
a.start();//第三步start创建对象。调用start方法。也可以换成run
b.start();
}
}
作者:
932759732
时间:
2013-4-26 21:16
run方法只是调用了A类中的run方法,在不考虑垃圾回收线程的情况下。还是只有一个主线程在执行。也就是等a中的run方法执行玩了才会执行b
如果用start的话就是另外开启了一个线程并且执行run方法,主线程继续向下执行,这样才能实现a和b一起执行起来
作者:
殇_心。
时间:
2013-4-26 21:17
调用run,仅仅只是调用run这个方法。
调用start,是开启线程,并调用run方法。
作者:
曹德君
时间:
2013-4-26 21:19
本帖最后由 曹德君 于 2013-4-26 21:21 编辑
为什么要覆盖run方法呢?
Thread类用于描述线程。
该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码。
当你有自己特有代码需要执行多线程的时候,你就可以覆盖RUN方法来。运行自己的多线程代码。明白?
start()只是启用这个线程。至于你运行的是什么代码,就需要复写Run 方法。
作者:
袁梦希
时间:
2013-4-26 21:20
run()是线程要执行的共享数据,存储在run方法里
而start是开启线程的方法。
作者:
lipingan0520
时间:
2013-4-26 21:36
调用run,只是普通的方法调用。
调用start,虚拟机会在底层开启多线程,并调用你覆盖的run方法。
创建Runnable多线程更好用哦。
作者:
刘胜寒
时间:
2013-4-26 21:41
调用run是单线程
调用start是多线程
作者:
黑马-秦歌
时间:
2013-4-26 21:45
直接调用 run方法是运行在原来的线程中。 调用 start 是开启新线程。新线程内部调用 run 方法, 由于 Thread 类内部 run 方法并没有代码。所以在子类中要 覆盖 run 方法。调用是在子类发起。所以会调用 子类 run 方法。要说不同就是 会不会开新线程吧。
作者:
蔚蓝小嗨
时间:
2013-4-26 21:50
调用run的话,只是调用run这个方法,还是单线程的;调用start,是开启多线程的方法,主线程和分线程都会运行
作者:
陈湘林
时间:
2013-4-26 21:56
Thread类中run()和start()方法的区别:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
作者:
吴波
时间:
2013-4-26 22:08
直接调用run()不存在多线程了,只是调用方法,同时也必须执行完run()后才能执行后面的语句
但start()就不同了,他开启了线程,默认调用run()方法
作者:
付鑫鑫
时间:
2013-4-27 07:59
之前这个问题我也碰到过,呵呵,希望对你有帮助
D:\日记\回答问题
作者:
付鑫鑫
时间:
2013-4-27 08:00
之前这个问题我也碰到过,呵呵,希望对你有帮助
class Java
{
public static void main (String []args)
{
A a=new A("唐明雨"); //3.创建新线程,注意,这里还没有开启哦,只是创建了哦,呵呵.
A b=new A("刘潇莹");
a.start(); //4.调用start()方法, 开启新线程,内部会自动调用 run()方法 .可以查看源代码,其中有调用 run()方法的步骤
b.start();
}
}
class A extends Thread //1.定义一个继承Thread的类
{
private String name;
A(String name)
{
this.name=name;
}
public void run() //2.重写run方法,并把想要运行的程序放到run()方法里去
{
for(int x=0;x<10;x++)
{
for(int y=0;y<10;y++)
{}
System.out.println(name+"....x="+x);
}
作者:
黄玉昆
时间:
2013-4-27 20:06
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2