线程之谜
创建一个线程有两种方法,
第一种是 class T extends Thread { ... },在 T 类中覆写 Thread 类的 run 方法,然后用 T t = new T(); t.start() 来启动这个线程;
第二种是 class R implements Runnable { ... },然后 Thread t = new Thread(new R()) 来启动一个线程。
那么问题来了,如果我们这样写:
class T extends Thread {
public void run() {
System.out.println("T.run");
}
public T(Runnable r) {
super(r);
}
}
class R implements Runnable {
public void run() {
System.out.println("R.run");
}
}
然后我们用这样的变态用法: T t = new T(new R()); t.start() 来启动一个线程,那么这个线程会执行哪个 run 方法呢?是 T.run,还是 R.run,还是两个方法都执行?
附:我在自己的电脑上执行了这段程序,结果是输出了 T.run。我并不是想只知道一个结果,我想知道的是,为什么会产生这个结果?哪个 Java 文献上对此作出了解释?