我是java的新手。一个疑问。
我在内部看到,Thread类的run()
方法调用了Runnable接口的run()
。
我的问题是,
Thread类的run()
方法如何调用Runnable接口的run()
?
提前感谢。
答案 0 :(得分:5)
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()
方法以开始执行新的控制线程。
我们需要将runnable对象传递给线程对象的构造函数的原因是线程必须有一些方法来获取我们希望线程执行的run()
方法。由于我们不再重写Thread类的run()
方法,因此执行Thread类的默认run()
方法,
这个默认的run()方法如下所示:
public void run() {
if (target != null) {
target.run();
}
}
这里,target
是我们传递给线程构造函数的runnable对象。因此,线程开始使用Thread类的run()
方法执行,该方法立即调用runnable对象的run()
方法。
答案 1 :(得分:0)
本质上,Thread实现了Runnable。 Thread的run函数调用“target”(其中target实现Runnable)run方法(如果存在)。如下面的代码所示,通常在创建Thread对象时设置目标runnable。
注意:Runnable是一个匿名类,不需要深入研究,只需将其视为Runnable的子类。
Runnable run = new Runnable() { public void run() { /* code */ } }; // Create runnable
new Thread(run).start(); // Create thread and start the thread.