黑马程序员技术交流社区
标题: 多线程的一个面试题的结果,为什么? [打印本页]
作者: 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
厉害....
作者: 215041631 时间: 2014-8-6 20:50
这代码看着就觉得恶心。
作者: wnmmp 时间: 2014-8-6 21:19
也就考试我们一下,真实开发用不到
作者: liujingnan 时间: 2014-8-6 23:33
重写的方法覆盖了原有的方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |