我是java的新手。一疑。
我读到,在内部,Thread 类的run()
方法调用 Runnable 接口的run()
.
我的问题是,
Thread 类的run()
方法如何调用 Runnable 接口的run()
?
提前致谢。
我是java的新手。一疑。
我读到,在内部,Thread 类的run()
方法调用 Runnable 接口的run()
.
我的问题是,
Thread 类的run()
方法如何调用 Runnable 接口的run()
?
提前致谢。
Runnable 接口只包含一种方法:run()
方法。该类Thread
实际上实现了Runnable
接口。
因此,当您从 Thread 类继承时,您的子类也实现了 Runnable 接口。
这是一个例子,这一切是如何发生的:
import java.applet.Applet;
public class OurApplet extends Applet {
public void init() {
Runnable ot = new OurClass();
Thread th = new Thread(ot);
th.start();
}
}
调用新 Thread 对象的start()
方法以开始执行新的控制线程。
我们需要将可运行对象传递给线程对象的构造函数的原因是线程必须有某种方式来获取run()
我们希望线程执行的方法。由于我们不再重写Thread 类的方法,所以执行run()
Thread 类的默认run()
方法,这个默认的 run() 方法如下所示:
public void run() {
if (target != null) {
target.run();
}
}
这里,target
是我们传递给线程构造函数的可运行对象。run()
所以线程从Thread 类的方法开始执行,它立即调用run()
我们的可运行对象的方法。
本质上,Thread 实现了 Runnable。线程的 run 函数调用“目标”(目标实现 Runnable)的 run 方法(如果存在)。如下代码所示,通常在创建 Thread 对象时设置目标可运行。
注意:Runnable 是一个匿名类,无需深入研究,只需将其视为 Runnable 的子类。
Runnable run = new Runnable() { public void run() { /* code */ } }; // Create runnable
new Thread(run).start(); // Create thread and start the thread.