继承Thread类
- 创建myThread类继承Thread
- 在myThread类中重写run()方法
- 创建myThread类的对象
- 调用start(),启动线程
- 注意:为什么要重写run()方法?run()里面封装的是被线程执行的代码。
- run()和start()方法的区别?run()直接调用仅仅是普通方法,start()先启动线程,再由JVM调用run()方法
实现Runnable接口
- 自定义类myRunnable实现Runnable接口
- 在myRunnable里面重写run()
- 创建myRunnable的对象
- 创建Thread类的对象,并把上一步中的对象作为构造参数传递。
有了方式1 为什么还有方式2呢。
实现接口方式的好处:
可以避免由于java单继承带来的局限性。
适合多个相同程序的代码去处理同一个资源的情况,把线程同程序的代码,数据有效分离,较好的体现了面向对象的设计思想。