《Java多线程编程核心技术(第2版)》 —1.2.7 实现Runnable接口与继承Thread类的内部流程
【摘要】
本节书摘来自华章计算机《Java多线程编程核心技术(第2版)》 一书中第1章,第1.2.7节,作者是高洪岩。
1.2.7 实现Runnable接口与继承Thread类的内部流程
使用如下代码以实现Runnable接口法启动一个线程的执行过程和在前面章节使用继承Thread类启动一个线程时的执行过程是不一样的:
MyRunnable run = new MyRunnable();
Thread t = new Thread(run);
t.start();
JVM直接调用的是Thread.java类的run()方法,该方法源代码如下:
@Override
public void run() {
if (target != null) {
target.run();
}
}
在方法中判断target变量是否为null,不为null则执行target对象的run()方法,target存储的对象就是前面声明的MyRunnable run对象,对Thread构造方法传入Runnable对象,再结合if判断就可以执行Runnable对象的run()方法了。变量target是在init()方法中进行赋值初始化的,核心源代码如下:
private void init(ThreadGroup g, Runnable target, String name,
long stackSize, AccessControlContext acc,
boolean inheritThreadLocals) {
……
this.target = target;
……
}
而方法init()是在Thread.java构造方法中被调用的,源代码如下:
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
通过分析JDK源代码可以发现,实现Runnable接口法在执行过程上相比继承Thread类法稍微复杂一些。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)