Thread子类重写run()方法,为什么不需要super.run()?这样调用start()为何能创建新线程?
在java源码中
public void run(){ if (target != null) { taeget.run(); } }
这个target就是new Thread(Runnable)中传进去的Runnable
target
new Thread(Runnable)
Runnable
这个run本来就是 用来实现被你重写的,来实现你要运行的东西的
run
当你用new Thread(Runnable)的时候,就会自动调用target的run
所以 当你用继承的方式来新建线程类,原来的run也没有必要被运行
至于start 在内部的的话,会调用一个start0 的native 函数,这个函数就是由jvm系统底层来实现了
start0
目测就是扔给c/c++ 创建一个线程,并运行
所以一调用start,就会由jvm的代码来帮你创建,运行程序
start
有兴趣研究,可以看看java的源码
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(1)
在java源码中
这个
target
就是new Thread(Runnable)
中传进去的Runnable
这个
run
本来就是 用来实现被你重写的,来实现你要运行的东西的当你用
new Thread(Runnable)
的时候,就会自动调用target
的run
所以 当你用继承的方式来新建线程类,原来的
run
也没有必要被运行至于start 在内部的的话,会调用一个
start0
的native 函数,这个函数就是由jvm系统底层来实现了目测就是扔给c/c++ 创建一个线程,并运行
所以一调用
start
,就会由jvm的代码来帮你创建,运行程序有兴趣研究,可以看看java的源码