首先看一段代码(面试题),看一下执行结果
public static void main(String[] args) {
new Thread(new Runnable() {
//重写Runnable下的run方法
public void run() {
System.out.println("number1");
}
}) {
//重写Thread的run方法
public void run() {
System.out.println("number2");
};
}.start();
}
执行结果:
看一下下面的两种方式,就会知其所以然了
第一种方式:继承
下面我们来分析下面这一段代码的执行流程
public class ThreadDemo01 {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
}
}
//自定义一个类继承于Thread
class MyThread extends Thread {
@Override
//重写Thread的run方法
public void run() {
System.out.println("number2");
}
}
1-创建对象执行过程
2-start方法执行过程
3-执行结果
第二种方式:实现Runnable接口
下面我们来分析下面这一段代码的执行流程
public class ThreadDemo01 {
public static void main(String[] args) {
//创建实现类对象,并向上转型
Runnable target = new MyThread();
//将实现类对象作为参数传入
Thread mt = new Thread(target);
mt.start();
}
}
//自定义一个类实现了Runnable接口
class MyThread implements Runnable {
@Override
//重写Runnable的run方法
public void run() {
System.out.println("number1");
}
}