A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wnmmp 中级黑马   /  2014-8-5 17:47  /  1498 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    这是网上下载的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

12 个回复

倒序浏览
其实这考的是匿名类创建的概念。这里创建了Runnable 的匿名子类,但是——没使用。因为new Thread(new Runnable() {...})这句代码的功能被紧接着的{}变成了创建Thread的匿名子类并在这个匿名子类中重写Thread的run方法最后启动线程执行这个重写的run方法。之前重写Runnable 的工作白费了,被丢弃了

点评

厉害啊  发表于 2014-8-5 20:37
回复 使用道具 举报
你override了的thread的run方法,不会再运行接口中的方法
回复 使用道具 举报
重写run方法,匿名内部类被覆盖了
回复 使用道具 举报
Runnable和Thread都用匿名类的形式创建。Thread中的run方法被覆盖了。
回复 使用道具 举报
你override了的thread的run方法,不会再运行接口中的方法
回复 使用道具 举报
复写了接口中的Run方法
回复 使用道具 举报
明白了,是圆括号“)”没搞懂,要是放在“.start()”前面就应该是两个结果了
回复 使用道具 举报
fantacyleo 发表于 2014-8-5 17:58
其实这考的是匿名类创建的概念。这里创建了Runnable 的匿名子类,但是——没使用。因为new Thread(new Runn ...

厉害....
回复 使用道具 举报
这代码看着就觉得恶心。
回复 使用道具 举报
215041631 发表于 2014-8-6 20:50
这代码看着就觉得恶心。

也就考试我们一下,真实开发用不到
回复 使用道具 举报
重写的方法覆盖了原有的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马