方式一:继承于Thread类
1.创建一个继承于Thread类的子类
2.重写Thread类的run() -->将此线程执行的操作声明在run()中
3.创建Thread类的子类的对象
4.通过此对象调用start()
方式二:实现Runnable接口
1.创建一个实现了Runnable接口的类
2.实现类去实现Runnable中的抽象方法: run()
3.创建实现类的对象
4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
5.通过Thread类的对象 调用start()
一、比较创建线程的两种方式
开发中:优先选择:实现Runnable 接口的方式
原因: 1.实现的方式没有类的单继承性的局限性
2.实现的方式更适合来处理多个线程有共享数据的情况。
二、两者的联系:
其实Thread类实现了Runnable接口:public class Thread implements Runnable
所以两者的本质都是重写了Runnable中的run()。所以不能发现两者的相同点是两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。