一、创建线程的方法
1.继承Thread类
实现步骤:
(1)创建一个继承于Thread类的子类
(2)重写Thread类的run()方法【线程执行的操作声明在run()中】
(3)创建Thread类的子类的对象
(4)通过此对象调用start()方法【①启动线程②调用当前线程对象的run方法】
代码
//(1)创建一个继承于Thread类的子类
class MyThread1 extends Thread{
public MyThread1(String name){
super(name);
}
//(2)重写Thread类的run()方法
@Override
public void run() {
System.out.println("第一种创建线程");
}
}
}
public class ThreadTest{
public static void main(String[] args) {
//(3)创建Thread类的子类的对象
MyThread1 t1=new MyThread1();
//(4)通过此对象调用start()方法
t1.start();
}
}
2.实现Runnable接口
实现步骤
(1)创建一个实现了Runnable接口的类
(2)该实现类 去实现Runnable中的抽象方法run()
(3)创建实现类的对象
(4)将此对象作为参数传递到Thread类的构造器中,创建 Thread类的对象
【Thread构造方法源码:public Thread(Runnable target)】
(5)通过Thread类的对象调用start()
代码
//1.创建一个实现了Runnable接口的类
class MyThread2 implements Runnable{
@Override
//2.实现类去实现Runnable中的抽象方法run()
public void run() {
System.out.println("第二种创建线程:实现Runnable接口");
}
}
public class ThreadTest1 {
public static void main(String[] args) {
//3.创建实现类的对象
MyThread2 m=new MyThread2();
// 4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
Thread thread = new Thread(m);
// 5.通过Thread类的对象调用start()
thread.start();
二、说明
在前边说过start()方法的作用:
(1)启动线程
(2)调用当前线程的run()方法
那么问题来了:为什么在使用Runnable接口创建线程的方法中,明明是Thread类的对象调用的start(),为什么最终会是实现Runnable接口的类的run()方法被执行,而不是Thread类的run()方法被执行?
原因下次再说,要去上课了
原文地址:https://blog.51cto.com/14234228/2455946
时间: 2024-10-08 11:23:21