1)继承Thread,重写其的run方法
2)实现Runnable接口
代码如下:

总结:
创建线程的传统方式就上面两种(这里不考虑jdk1.5种线程并发库里的创建方式,后续会写到),但写的方式却是多种多样,希望初学者不要被其搞混掉
两种方式都可以创建线程,第一种方式创建比较简单,但由于java是单继承的缘故,创建出的Thread子类就无法在继承其他类;实现Runnable接口的方式可以将cpu、代码和数据分开,同时创建出的线程可以共享处理同一份资源。
记住:Thread类本身也实现了Runnable接口,因此Thread类及其子类的对象也可以作为target传递给新的线程对象。