本帖最后由 谭立文 于 2012-9-20 14:48 编辑
package com.wenfengkeji.thread;
public class Demo5 extends Thread{
public Demo5(Runnable r)
{
super(r);
}
@Override
public void run() {
System.out.println("haha");
}
public static void main(String[] args)
{
AA target = new AA();
Demo5 t = new Demo5(target);
t.start();
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("a");
}
}){
@Override
public void run()
{
System.out.println("b");
}
}.start(); //这段代码的层次关系就相当于是我给你写出来的
}
}
class AA implements Runnable
{
public void run()
{
System.out.println("Runable");
}
}
Demo5继承与thread然后重写了父类的 run方法 , 然后以实现了Runnable的AA 对象为实例new了一个线程
我们看看 Thread(Ruannble r)的源代码。
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
public void run() { //这是Thread类中run方法的源代码
if (target != null) {
target.run();
}
} 如果 t .start() 调用的是Thread类run方法 且 target不为null则执行 实现了Runnable接口的类中的run方法,可是 Demo5对run方法进行了重写(覆盖了父类的run方法),这样就不会调用父类的
run方法 也就不会执行Runnable接口中的run方法 ,如果你将重写Thread的run方法改为super.run()就是执行实现了Runnabll接口类的 run方法中的代码体了;
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("a");
}
}){
@Override
public void run()
{
super.run();
}
}.start();
|