黑马程序员技术交流社区

标题: 多线程的一个面试题的结果,为什么? [打印本页]

作者: wnmmp    时间: 2014-8-5 17:47
标题: 多线程的一个面试题的结果,为什么?
    这是网上下载的java基础笔记中关于多线程创建的一个面试题,输出结果如代码,为什么不是:subthread run(换行)runnable run?这是我的理解:先创建Runnable的匿名子类,调用构造代码块输出subthread run,然后线程启动运行run方法输出runnable run。
        new Thread(newRunnable(){  //匿名
            public voidrun(){
                System.out.println("runnablerun");
            }
        })
        {
            public void run(){
                System.out.println("subthreadrun");
            }
       }.start();  //结果:subthread run

作者: fantacyleo    时间: 2014-8-5 17:58
其实这考的是匿名类创建的概念。这里创建了Runnable 的匿名子类,但是——没使用。因为new Thread(new Runnable() {...})这句代码的功能被紧接着的{}变成了创建Thread的匿名子类并在这个匿名子类中重写Thread的run方法最后启动线程执行这个重写的run方法。之前重写Runnable 的工作白费了,被丢弃了
作者: xj55646    时间: 2014-8-5 19:00
你override了的thread的run方法,不会再运行接口中的方法
作者: 逍遥客    时间: 2014-8-5 20:33
重写run方法,匿名内部类被覆盖了
作者: hmid    时间: 2014-8-6 00:24
Runnable和Thread都用匿名类的形式创建。Thread中的run方法被覆盖了。
作者: 小洁呵呵    时间: 2014-8-6 12:57
你override了的thread的run方法,不会再运行接口中的方法
作者: lspooooo    时间: 2014-8-6 13:20
复写了接口中的Run方法
作者: wnmmp    时间: 2014-8-6 20:15
明白了,是圆括号“)”没搞懂,要是放在“.start()”前面就应该是两个结果了
作者: 何磊    时间: 2014-8-6 20:29
fantacyleo 发表于 2014-8-5 17:58
其实这考的是匿名类创建的概念。这里创建了Runnable 的匿名子类,但是——没使用。因为new Thread(new Runn ...

厉害....
作者: 215041631    时间: 2014-8-6 20:50
这代码看着就觉得恶心。
作者: wnmmp    时间: 2014-8-6 21:19
215041631 发表于 2014-8-6 20:50
这代码看着就觉得恶心。

也就考试我们一下,真实开发用不到
作者: liujingnan    时间: 2014-8-6 23:33
重写的方法覆盖了原有的方法。




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