黑马程序员技术交流社区

标题: 线程的调用为什么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