Thread与Runnable的关系
public class ThreadDemo {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
System.out.println("Runnable的run方法");
}
}) {
public void run() {
System.out.println("Thread的run()方法");
}
}.start();
}
}
对于上面的这段代码它的执行结果是”Thread的run()方法”,但这是为什么呢?
在看下面这段代码。
public class ThreadDemo {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
System.out.println("Runnable的run方法");
}
}) {
public void run() {
System.out.println("Thread的run()方法");
super.run();
}
}.start();
}
}
上述代码的执行结果是
Thread的run()方法
Runnable的run方法
这就不得不说Thread与Runnable的关系了。Thread实现了Runnable。所以在Thread类和Runnable中分别都重写了run()方法之后,程序会执行Thread的run()方法。
public class Thread implements Runnable {
public Thread(Runnable target) {}
@Override
public void run() {
if (target != null) {
target.run();
}
}<
}
上述是Thread的部分源码,可以通过源码发现,如果没有重写Thread的run()方法,并且传入了一个Runnable的实现类,那么执行的是Runnable实现类的run()方法。