关于实现Runnable的问题

Vis*_*hnu 1 java multithreading

可能重复:
Java:"实现Runnable"与"extends Thread"

我有两个关于多线程编程的问题.我在网上看了几个答案,但我仍然找不到令人满意的答案.

  1. 实现Runnable比扩展线程类更受欢迎.为什么?

  2. 我们如何能够通过覆盖run()方法来逃脱?

根据Herbert Schildt的"The Complete Reference to Java",如果我们没有覆盖除run()之外的Thread类的任何方法,那么我们最好实现Runnable.

我的第二个问题可能听起来有点傻,但我似乎错过了一些东西,我不确定整个事情是如何运作的.

Gra*_*ray 5

1:实现Runnable比扩展线程类更受欢迎.为什么?

因为它允许你的类扩展另一个类,如果它想要而不是被迫扩展Thread.

2:我们如何能够摆脱run-()方法的过度消除?

您当然可以覆盖其他方法,但该Thread对象将run()在线程启动时调用该方法.这就是它的工作原理.默认Thread.run()方法是:

public void run() {
    if (target != null) {
        target.run();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你Thread使用a 设置构造函数,Runnabletarget就是设置的.如果您改为扩展Thread,@Override那么run()方法就是在启动线程对象时将调用的方法.

这就是Thread班级的工作方式.

2:我们如何能够摆脱run-()方法的过度消除?

您可能在这里遇到了错误,而是询问为什么我们只需要实现run()方法Runnable().

  • Runnable是一个必须实现的单一run()方法的接口.
  • Thread是一个你正在扩展的具体课程.您可以覆盖具体类中的任何方法,除非该类final或方法是final.

确保使用正确的Java术语,不要混淆implementoverride.