黑马程序员技术交流社区

标题: 多线程中run方法遇到的问题,请高手指点!!!! [打印本页]

作者: yinxjfly    时间: 2014-6-21 21:57
标题: 多线程中run方法遇到的问题,请高手指点!!!!
class  ThreadTest
{
        public static void main(String[] args)
        {
       
                Thread t1=new Thread(new Runnable()
                {
                        public void run()
                        {
                                System.out.println("RunnableRUN().........run!");
                        }

                })
                {
                        public void run()
                        {
                                System.out.println("ThreadRUN().........run!");
                        }
                };
                t1.start();
        }
}
运行结果为什么是Thread类中的run方法(ThreadRUN().........run!),
而不是Runbale接口中的run方法??


作者: 黎志勇    时间: 2014-6-21 22:16
本帖最后由 黎志勇 于 2014-6-21 22:17 编辑


上图是Thread类中,run()方法的源码,可以看到,默认的run()方法是判断是否有传入Runnable对象,有则执行Runnable对象的run()方法。
现在你把匿名Thread类的run方法覆写了,就不存在上述的判断是否有传入Runnable对象并执行执行Runnable对象的run()的操作了。



作者: 姿_`态    时间: 2014-6-21 23:08
楼主的代码可以分为下面两个 ,两个都是可以运行的,我们都知道,多线程有两种实现方法,一种是继承Thread,一种是实现runnable,按照楼主的代码,程序首先会创建线程,先看runnable的run方法,然后到了Thread的run方法,Thread的run方法,把runnable的覆盖了,所以会执行Thread的run方法,
最后开启线程。

class  ThreadTest4
{
        public static void main(String[] args)
        {

                Thread t1=new Thread()
                {
                        public void run()
                        {
                                System.out.println("ThreadRUN().........run!");
                        }
                };
                t1.start();
        }
}
=============================================================================
class  ThreadTest3
{
        public static void main(String[] args)
        {

                Thread t1=new Thread(new Runnable()
                {
                        public void run()
                        {
                                System.out.println("RunnableRUN().........run!");
                        }

                });
                t1.start();
        }
}



作者: endian11    时间: 2014-6-21 23:21
我同意上楼的人的回答,认为有点道理




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2