有关实现Runnable的问题
  可能重复: 
  Java:“实现Runnable”与“扩展线程” 
我有两个有关多线程编程的问题。 我在网上阅读了一些答案,但仍然找不到令人满意的答案。
实现Runnable比扩展线程类更受欢迎。 为什么?
我们如何能够忽略run()方法?
根据Herbert Schildt的“The Complete Reference to Java”,如果我们不覆盖除run()以外的任何Thread类的方法,最好是实现Runnable。
我的第二个问题可能听起来有点愚蠢,但我似乎错过了一些东西,我不确定整个事情是如何工作的。
1:实现Runnable比扩展线程类更受欢迎。 为什么?
  因为它允许你的类如果想要扩展另一个类而不是被迫扩展Thread 。 
2:我们如何能够摆脱run()方法?
  你当然可以重写其他方法,但是当线程启动时, Thread对象会调用run()方法。  这就是它的工作原理。  默认的Thread.run()方法是: 
public void run() {
    if (target != null) {
        target.run();
    }
}
  如果使用Runnable调用Thread构造函数,那么这就是target设置的target 。  如果您改为扩展Thread和@Override run()方法,那么这是在线程对象启动时将被调用的方法。 
  这就是Thread类的工作原理。 
2:我们如何能够摆脱run()方法?
  您可能在这里有错误,而是问为什么我们只需要在Runnable()实现run()方法。 
Runnable是一个必须实现的单个run()方法的接口。 Thread是您正在扩展的具体类。  您可以重写具体类中的任何方法,除非该类是final或方法是final 。   确保你使用正确的Java术语,不查询股价implement和override 。 
在深入研究之前需要三个基础。
extend一个类。 implement任意数量的接口。 extend任意数量的接口。   另外, abstract类是一个类。  因此,它的行为就像一个类,你不能implement它。  你只能extend它。 
如果您扩展Thread,而实现Runnable时没有获得这些陷阱,则会出现一些陷阱。
public static String getName() {
    return "My Test Application";
}
public static void stop() {
    System.out.println("Shutting down");
}
public static void main(String... args) {
    new Thread() {
        @Override
        public void run() {
            System.out.println(getName());
            stop();
        }
    }.run();
    System.out.println("Bye now.");
}
版画
Thread-0
Bye now.
看看你能发现多少错误。
链接地址: http://www.djcxy.com/p/92071.html