在Java中,为什么线程类被创建为具体类?
我们知道有两种方法可以在Java中创建线程在Java中,为什么线程类被创建为具体类?,java,multithreading,thread-safety,threadpool,Java,Multithreading,Thread Safety,Threadpool,我们知道有两种方法可以在Java中创建线程 实现可运行接口 扩展Thread类[Thread是一个具体的类,具有run()方法的默认实现] 在第二种方法中,我们必须为run()方法提供实现,以执行线程逻辑。如果是这样的话,那么为什么JDK开发人员并没有将run()方法作为线程类中的抽象方法呢 我很想知道背后的原因,在Thread类中提供run()方法的默认实现。如果Thread\run()是抽象的,那么下面将是编译错误: Thread t = new Thread(myRunnable); 你
Thread\run()
是抽象的,那么下面将是编译错误:
Thread t = new Thread(myRunnable);
你几乎已经回答了你自己的问题。下面是run的默认实现
public void run() {
if (target != null) {
target.run();
}
}
也就是说,默认实现调用通过构造函数传入的Runnable。这是你在问题中提到的第一种方法
new Thread( runnable ).start();
若run被声明为抽象,那个么正如kajacx所指出的那个样;那样的话,这种方法就不适用了 非抽象类中不能有抽象方法强> 因此,在
Thread
中使用抽象方法也必须使Thread
类抽象。那为什么停在那里?让它成为一个界面。但是等等。。我们已经有了线程类实现的Runnable
接口
还要注意,我们调用start()
方法,而不是run()
方法。start()将启动新的执行线程。run()将只在当前线程中运行该方法
还重写了run()方法。该方法来自Runnable接口
public
interface Runnable {
public abstract void run();
}
扩展线程只是线程创建的另一种方式,它不能是抽象的,因为如果不亲自编写具体的实现,您将无法创建线程对象。您忘记了
t1=Thread(runnable)
syntaxTip of the day:忘记线程实现Runnable并始终使用构造函数new Thread(new MyRunnable());非常感谢Aruistante回答了我的问题:)OP知道这一点,他们的问题是为什么Thread
不是一个抽象类。如果Thread#run()是抽象的,[那么]下面是创建新线程的更好方法,这将是一个编译错误