《Java多线程编程核心技术(第2版)》 —1.2.7 实现Runnable接口与继承Thread类的内部流程
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类法稍微复杂一些。
- 点赞
- 收藏
- 关注作者
评论(0)