我们知道有两种方法可以用Java创建一个Thread。
在第二种方法中,我们必须提供run()方法的实现来执行我们的线程逻辑。如果是这样,那么为什么JDK开发人员没有在Thread Class中将run()方法作为抽象?
我很想知道背后的原因,为Thread Class中的run()方法提供默认实现。
答案 0 :(得分:6)
如果Thread#run()
是抽象的,那么以下将是编译错误:
Thread t = new Thread(myRunnable);
答案 1 :(得分:3)
你几乎回答了自己的问题。这是run
的默认实现public void run() {
if (target != null) {
target.run();
}
}
也就是说,默认实现调用通过构造函数传入的Runnable。这是您在问题中提到的第一种方法。
new Thread( runnable ).start();
如果运行已被声明为抽象,那么kajacx也指出了;那个方法不会编译。
答案 2 :(得分:0)
你不能在非抽象类中使用抽象方法!
因此在Thread
中使用抽象方法也必须使Thread
类抽象。那为什么要停在那里?使它成为一个界面。但是等等..我们已经有了Thread类实现的Runnable
接口。
另请注意,我们调用了start()
方法,而不是run()
方法。 start()将启动一个新的执行线程。 run()将在当前Thread中运行该方法。
还重写了run()方法。该方法来自Runnable接口。
public
interface Runnable {
public abstract void run();
}
扩展线程只是线程创建的另一种方式,它不能是抽象的,因为如果没有自己编写具体的实现,就无法创建线程对象。