Thread子类重写run()方法,为什么不需要super.run()?这样调用start()为何能创建新线程?
在java源码中
public void run(){
if (target != null) {
taeget.run();
}
}
这个target
就是new Thread(Runnable)
中传进去的Runnable
这个run
本来就是 用来实现被你重写的,来实现你要运行的东西的
当你用new Thread(Runnable)
的时候,就会自动调用target
的run
所以 当你用继承的方式来新建线程类,原来的run
也没有必要被运行
至于start 在内部的的话,会调用一个start0
的native 函数,这个函数就是由jvm系统底层来实现了
目测就是扔给c/c++ 创建一个线程,并运行
所以一调用start
,就会由jvm的代码来帮你创建,运行程序
有兴趣研究,可以看看java的源码