java面试题40 当编译并运行下面程序时会发生什么结果()
1 2 3 4 5 6 7 8 9 10 11 |
|
A 编译错误,指明run方法没有定义
B 运行错误,指明run方法没有定义
C 编译通过并输出0到9
D 编译通过,但无输出
蒙蔽树上蒙蔽果,蒙蔽树下你和我
说一说我自己的理解。
这题可以用面向对象的思想即可解决
首先继承Thread,然后调用run方法,bgroud并没有重写run方法,那么就是调用父类Thread的run方法。
然后查看父类代码
@Overridepublic void run() {if (target != null) {target.run();}}
private Runnable target;
其中target是Runnable对象
明显target并没有显示初始化。
所以不会有显示。
一般target的初始化是这样的,将runnable对象作为thread参数进行线程的创建
public Thread(Runnable target) {init(null, target, "Thread-" + nextThreadNum(), 0);}
再看init()
private void init(ThreadGroup g, Runnable target,String name,long stackSize) {init(g, target, name, stackSize, null);}
在init(g, target, name, stackSize, null),可以找到this.target = target;
此时进行了初始化。
最后说一说,Thread 的执行过程,Theard的启动方法是start().线程类调用start();然后执行start0()本地方法,然后就没办法再追溯下去了。
start我听过别人说,是一个准备工作(比如你要吃苹果,不得先洗一下,真正吃时间是洗完后),并没有获得cpu,调用run()才是获得了cpu。
答案选D
我是歌谣,有什么不合理之处欢迎指出。喜欢敲代码,无聊刷刷题。
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期科技领域知识)
歌谣带你看java面试题