线程的创建方式比较

线程的创建方式:
1:通过继承Thread类来创建线程。

2:通过实现Runnable接口来创建线程。

然后在Main方法里分别创建通过继承Thread类和实现Runnable接口的线程,如下图:

我们可以看见:通过继承Thread类的创建线程是直接new 一个对象的。而通过实现接口的是new 一个对象之后再在对象外面包一层Thread()。

注意!!! 
两种方法都对run()方法进行了重写,实际上,Thread类就已经实现了Runnable接口,Thread类里的run()方法就是对Runnable接口中的run()方法的重写。run()方法的最初来源其实就是Runnable接口里的抽象方法。而start()的最初来源是Thread这个类里面的。线程只有通过调用start()方法才能从新建状态到达就绪状态
然后等待cpu的调度。Thread和Runnable接口都是在lang包里。

总结:
采用继承Thread类方式:
(1)优点:编程简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获取当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同的线程来处理同一份资源的情况,从而可以将cpu代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

原文地址:https://www.cnblogs.com/xm970829/p/12980611.html